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个字节?我无法理解这背后的概念。
答案 0 :(得分:1)
sizeof(foo)
返回指针变量的大小(因为您将foo
声明为node *foo
),这在64位机器上只有8个字节,在32位机器上只有4个字节。
答案 1 :(得分:0)
节点(结构)和大小foo(指针变量)的大小不应相同。
指针存储变量的地址,而不是变量。 所以,指针的大小意味着地址变量的大小;它取决于平台和/或架构。
实际上,16位系统上的指针大小为2,32位系统上为4,64位系统上为8(并非总是如此)。
通常,在特定平台上,任何类型指针(char / int / void / ...)的大小等于整数大小(并非总是如此)。
有时候,你会得到混合(1,2)结果。
在我的PC(配置:基于x64的系统类型的PC,64位操作系统,IDE visual studio 2015,Code :: Blocks 13.12)中显示如下:
节点大小:8
foo的大小:4
节点大小 - >值:4
节点大小 - >下一个:4