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