在一个公共结构中,结构的大小等于其所有成员的大小之和,但是当我想将其应用于基于结构的链表时,它不成立。
我在 64 位 Windows 系统上运行以下代码,我的编译器是 gcc
typedef struct node {
int val;
struct node *head;
} node_t;
typedef struct point
{
int x;
int y;
} point_t ;
int main(){
point_t a = {1,1};
node_t b={1,NULL};
printf("%d %d %dn",sizeof(node_t),sizeof(b.head),sizeof(b.val));
printf("%d %d %d",sizeof(point_t),sizeof(a.x),sizeof(a.y));
}
输出结果是
16 8 4
8 4 4
我所期望的是,sizeof(b.val)
和sizeof(b.head)
的总和应该像sizeof(point_t),sizeof(a.x),sizeof(a.y)
一样sizeof(node_t)
Euqual。
那么在存储中形成链表的结构有什么特别之处吗?
hhh 我在 5 分钟后来回答我自己的问题。
原因是数据对齐。简单地说,在一个结构中,将为每个成员分配等于最大数据大小的存储
在这个问题中,sizeof(node_t.val)
是 4,但为其分配了 8(不改变其大小),因为此结构中最大的数据类型是struct node*
,其中大小为 8。