voidポインタ

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