汎用ポインタ *void の関数を構造体と組み合わせて使う。
構造体をポインタとして操る。
struct points *a;
ポインタ状態のときは->演算子で操作。
a->x=3; aにはアドレスが入っている。
アドレスを渡す。
void my_func(void *a2){
キャスト
struct points* a=(struct points *) a2;
#include<stdio.h> struct points{ int x; int y; }; void my_func(void *a2){ struct points* a=(struct points *) a2; printf("%p\n",a); printf("%d\n",(a)->x+(a)->y); } int main(){ struct points *a; a->x=3; a->y=4; printf("%d %d\n",a->x,a->y); printf("%p\n",a); my_func(a); }
出力
3 4
0x0
0x0
7
だめだったら。。
実体をはじめてきちんと宣言。
#include<stdio.h> struct points{ int x; int y; }; void my_func(void *a2){ struct points* a=(struct points *) a2; printf("%p\n",a); printf("%d\n",(a)->x+(a)->y); } int main(){ struct points a2; struct points *a; a=&a2; a->x=3; a->y=4; printf("%d %d\n",a->x,a->y); printf("%p\n",a); my_func(a); }