C语言 链表的结构相对于存储中的公共结构有什么特别之处吗?



在一个公共结构中,结构的大小等于其所有成员的大小之和,但是当我想将其应用于基于结构的链表时,它不成立。

我在 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。

相关内容

  • 没有找到相关文章

最新更新