struct数据类型的大小

时间:2016-05-06 03:14:40

标签: c++

struct node
{
int value;
node *next=NULL;
};

node *foo;
foo = new node;

cout<< "\nsize of node: " << sizeof(foo);
cout<< "\nsize of node->value: " << sizeof(foo->val);
cout<< "\nsize of node->next: " << sizeof(foo->next);

输出

size of node: 8 bytes
size of node->val: 4 bytes
size of node->next: 8 bytes

上面的代码段是单链表 节点的大小基于其内容是4 + 8 = 12个字节。那么它的大小是8个字节?我无法理解这背后的概念。

2 个答案:

答案 0 :(得分:1)

sizeof(foo)返回指针变量的大小(因为您将foo声明为node *foo),这在64位机器上只有8个字节,在32位机器上只有4个字节。

答案 1 :(得分:0)

节点(结构)和大小foo(指针变量)的大小不应相同。

指针存储变量的地址,而不是变量。 所以,指针的大小意味着地址变量的大小;它取决于平台和/或架构。

  1. 实际上,16位系统上的指针大小为2,32位系统上为4,64位系统上为8(并非总是如此)。

  2. 通常,在特定平台上,任何类型指针(char / int / void / ...)的大小等于整数大小(并非总是如此)。

  3. 有时候,你会得到混合(1,2)结果。

    在我的PC(配置:基于x64的系统类型的PC,64位操作系统,IDE visual studio 2015,Code :: Blocks 13.12)中显示如下:

    节点大小:8

    foo的大小:4

    节点大小 - >值:4

    节点大小 - >下一个:4