C 计算双链接列表中节点的大小

C 计算双链接列表中节点的大小,c,struct,C,Struct,我使用结构在C中创建了一个节点: struct node{ int data; struct node* left; struct node* right; } 现在,我使用以下代码计算节点的大小 printf("%d", size of(struct node)); 输出为6,我使用的是Turbo C++编译器。 请告诉我为什么节点的大小是6?要查看结构节点,请运行 #include <stdio.h> #include <std

我使用结构在C中创建了一个节点:

struct node{
       int data;
       struct node* left;
       struct node* right;
}
现在,我使用以下代码计算节点的大小

printf("%d", size of(struct node));

输出为6,我使用的是Turbo C++编译器。


请告诉我为什么节点的大小是6?

要查看
结构节点
,请运行

#include <stdio.h>
#include <stddef.h>

struct node{
    int data;
    struct node* left;
    struct node* right;
};

int main(void){
    printf("sizeof (struct node) is %zu\n", sizeof (struct node));
    printf("offsetof(struct node, data) is %zu\n", offsetof(struct node, data));
    printf("sizeof data is %zu\n", sizeof (struct node){}.data);
    printf("offsetof(struct node, left) is %zu\n", offsetof(struct node, left));
    printf("sizeof left is %zu\n", sizeof (struct node){}.left);
    printf("offsetof(struct node, right) is %zu\n", offsetof(struct node, right));
    printf("sizeof right is %zu\n", sizeof (struct node){}.right);
    return 0;
}
#包括
#包括
结构节点{
int数据;
结构节点*左;
结构节点*右;
};
内部主(空){
printf(“sizeof(结构节点)是%zu\n”,sizeof(结构节点));
printf(“offsetof(结构节点,数据)是%zu\n”,offsetof(结构节点,数据));
printf(“sizeof数据是%zu\n”,sizeof(结构节点){}.data);
printf(“offsetof(结构节点,左)是%zu\n”,offsetof(结构节点,左));
printf(“sizeof left是%zu\n”,sizeof(struct node){}.left);
printf(“offsetof(结构节点,右)是%zu\n”,offsetof(结构节点,右));
printf(“sizeof right是%zu\n”,sizeof(struct node){}.right);
返回0;
}
结构中可能有一些填充位/字节,使得
sizeof(struct node)
大于
sizeof(struct node){}.data)+sizeof(struct node){}.left)+sizeof(struct node){}.right)

也注意到,如果要打印<代码> SiZeSt,则应该使用<代码> %ZU > /Cube >(或<代码> %I/<代码>如果使用MSVC),而不是<代码> %D< /COD> .< /P> < P>“经典”Turbo C++目标为16位DOS(稍后版本支持16位窗口),因此近指针和<代码> INT/COM>各为2字节;由于它们都是相同的,对齐不需要填充,总大小等于其元素的纯和(2+2+2=6字节)


这样的指针指向其他
节点
结构的事实并不影响它们的大小(为什么要这样做?)

int和pointer都与平台相关。在不同的平台上,你会得到不同的结果。你可以试试。

为什么使用Turbo C++编译器编译C代码?你可以调用不正确的行为来将错误类型的数据传递给<代码> Primff()。您应该使用
%zu
打印
大小\u t
。然后,尝试获取结构中每个成员的大小。您确定要使用两个令牌
size of
而不是
sizeof
运算符吗?如果您将Aliging定义为1(gcc
#pragma pack(1)
),则可能是7。顺便说一句,我认为这个问题在拟议的重复问题中得到了很好的解释。也许你使用的是小内存模型,代码<> INT/C>和指针是16位,不要使用Turbo C++。它不是C或C++编译器,因为它早在第一个C++标准之前就已经发布了。并且C++不是扩展C,它是不同的语言,所以不要使用C++编译器来处理C代码。OP问题是指结果是6而不是通常的12。非常明确的答案——关于如何获得结构元素的大小——在大小为6的情况下,我们来做一个小点子,这将得到我的赞成。我想如果他在他的实现上运行此代码,他将能够通过检查其所有组件来了解为什么
sizeof(struct node)
是6。@mksteve但是有一个小问题:
sizeof(struct node)
在我的机器上是24,所以我不能告诉OP的机器上发生了什么…@mksteve无论如何,输出是实现定义的