计算双向链表中节点的大小

时间:2016-03-17 06:56:44

标签: c struct

我使用struct:

在C中创建了一个节点
struct node{
       int data;
       struct node* left;
       struct node* right;
}

现在我正在使用以下代码计算节点的大小

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

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

请清楚我为什么节点的大小是6?

3 个答案:

答案 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;与平台有关。在不同的平台上,您将获得不同的结果。你可以尝试一下。