我使用struct:
在C中创建了一个节点struct node{
int data;
struct node* left;
struct node* right;
}
现在我正在使用以下代码计算节点的大小
printf("%d", size of(struct node));
输出为6,我使用的是Turbo c ++编译器。
请清楚我为什么节点的大小是6?
答案 0 :(得分:6)
"经典" Turbo C ++的目标是16位DOS(后来的版本支持16位Windows),因此近指针和int
各占2个字节;对于它们都是相同的,对齐不需要填充,并且总大小相当于其元素的简单总和(2 + 2 + 2 = 6字节)。
这些指针指向其他node
结构这一事实并不影响它们的大小(为什么要这样?)。
答案 1 :(得分:2)
要查看struct node
,请运行
#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;
}
结构中可能有一些填充位/字节,使sizeof (struct node)
大于sizeof (struct node){}.data) + sizeof (struct node){}.left) + sizeof (struct node){}.right)
。
另请注意,要打印size_t
,您应使用"%zu"
(如果使用MSVC,则使用"%Iu"
,而不是%d
。
答案 2 :(得分:1)
两者&#34; int&#34;和&#34;指针&#34;与平台有关。在不同的平台上,您将获得不同的结果。你可以尝试一下。