在节点的结构中,数据的大小为4个字节,node *的大小为8个字节,而node的大小为16个字节。在4 + 8 = 12之后,节点的4个额外字节在哪里?
我对此一无所知。
struct node
{
int data;
struct node* next;
}s;
int main()
{
printf("node => %d \n",sizeof(s));
printf("node.data => %d \n",sizeof(s.data));
printf("node* => %d ",sizeof(s.next));
return 0;
}
/*OUTPUT-
node => 16
node.data => 4
node* => 8 */
答案 0 :(得分:0)
从本文档 (https://en.cppreference.com/w/c/language/struct) 在结构的任何两个成员之间或最后一个成员之后,但在第一个成员之前,可能没有未命名的填充。结构的大小至少等于其成员的大小之和。
这是由于对齐要求所致。
|--|--|--|--|??|??|??|??|--|--|--|--|--|--|--|--|
int padding pointer
指针在您的平台上对齐为8的倍数。
(https://en.wikipedia.org/wiki/Data_structure_alignment)