例如,我必须在一个函数中创建一个具有参数的结构:一个格式为void(*func)(void*)的函数指针和一个int id。
要创建的结构如下:
typedef struct example {
int id;
void (*func)(void *);
} Example;
现在我的问题是,当我为整个结构分配malloc空间时,我是否也为void函数指针分配malloc空间,因为它是一个指针?如果是的话,既然我不能得到一个空指针的大小,怎么办?谢谢
当为结构分配malloc空间时,sizeof(your_struct)
会获得整个结构的大小。您不需要为每个元素单独分配空间。在mallocing之后,您可以像结构的任何其他字段一样设置函数指针。
您不需要malloc空间。
在32位pc上,sizeof(指针)==4。
你可以测试
sizeof(struct example) == 8
sizeof(int) == 4
您不需要为要指向的函数分配内存。它已经存在并占用空间;它是在编译程序时分配的,并且您没有显式管理它。您只需获取它的地址并将其分配给指针即可。
关于指针本身的内存,当您为它所属的结构分配内存时,将提供它。计算sizeof struct example
时,会考虑int
和函数指针的大小,以及为正确对齐而添加的任何填充位。将这样的大小传递给malloc
将确保您有足够的内存用于整个结构,包括指针。