voidポインタ(void *)は、さまざまなポインタ型にキャストでき、逆にどんな型のポインタでもvoidポインタにキャストできる・・・。
これで状況に応じて、さまざまな型に対応した関数が定義できる・・・。
funcはvoidポインタと渡す型のサイズを受け取る・・・。
今回はsizeが4ならintであるとし、sizeが8を超えるならcharの配列として、元の型(であろうintかchar *)にキャストして値をセット・・・。
funcにxとstrのアドレスを渡して、そのあと出力する・・・。
$ vi void_pointer.c $ gcc void_pointer.c -o void_pointer $ ./void_pointer x = 123 str = ABCDE $
このように出力・・・。
ただし、void *に変換してしまうと、逆変換するときに違う型でない保証はなく、違う型の場合は、セグメンテーション違反になることもあり、あまり使わないほうがいい・・・。
Sample/void_pointer.c at master · bg1bgst333/Sample · GitHub