struct list_node {
int data;
struct list_node *next;
};
struct list {
struct list_node *head;
int count;
};
struct list *list_create() {
struct list *list = NULL;
list = (struct list *)malloc(sizeof(struct list));
if (list == NULL) return NULL;
list->head = NULL;
list->count = 0;
return list;
}
这个不算嵌套,因为next是指针,不管你的指针指向的类型有多大,指针本身只有4个字节或者8个字节
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在C语言中,结构体嵌套的内存分配是按照结构体成员的顺序进行的。在您的代码中,struct list
结构体包含了一个指向struct list_node
结构体的指针head
和一个整型变量count
。因此,struct list
结构体的内存大小为指针类型的大小(通常是4或8字节)加上整型变量的大小(通常是4字节),共计8或12字节,具体取决于编译器和操作系统的位数。
同样地,struct list_node
结构体包含了一个整型变量data
和一个指向struct list_node
结构体的指针next
。因此,struct list_node
结构体的内存大小为指针类型的大小加上整型变量的大小,共计8或12字节。
在您的代码中,struct list_node *
类型的指针变量head
指向struct list_node
结构体的第一个成员data
,因此head
指针指向的内存块的大小为整型变量data
的大小。head
指针指向的内存块的地址是struct list_node
结构体的地址,因此head
指针本身的大小为指针类型的大小。
总结一下,struct list
结构体的内存大小为8或12字节,struct list_node
结构体的内存大小为8或12字节。在您的代码中,通过malloc()
函数动态分配了一个struct list
结构体的内存空间,因此该结构体所占用的内存大小为8或12字节。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
结构体字节对齐,C语言结构体字节对齐详解,供参考:http://c.biancheng.net/view/243.html
(*(void(*)()0)()
我们从内往外一步一步来分析:
1、(void(*)()0 将0强制转换为数组指针 假设 a=(void(*)()0 2 、 *a 将a解引用 3、整体是个函数 |
void (*signal(int,void(*)(int)))(int);
1、signal是一次函数声明 2、signal函数的参数:第一个是int(整形),第二个是函数指针,该函数指针指向的函数参数为int,返回类型是void |
5、函数指针数组
函数指针数组:数组是存放相同类型数据的存储空间,当我们把函数的地址存到一个数组中,这个数组就叫做函数指针数组。
通过指针数组 :int *arr[10]
得到函数指针数组:int (*arr[10])()