正如问题所暗示的那样,通常节点的大小是多少:
struct node{ int data; node* next; };
如果struct保存数据和下一个节点的地址,那么指针地址的大小(不是指向的地址)是多少?如果下一个指向NULL会有区别吗?
如果我创建了“新节点”,那么数据(不是指针)保存,堆栈或堆的位置:
node* linkednode= new node;
如果我创建了类节点,答案是否会改变?
您可以使用 sizeof() 函数轻松检查它们,不仅适用于 int 和指针变量,还适用于节点本身 . 通常 int 和指针在32位平台上是4个字节,因此这是实现定义的,并且可能在其他平台上有所不同 . node 的总大小可能等于8,但可能不是由于上面指定的原因和\或数据对齐 .
sizeof()
int
node
无论成员值是什么,结构的大小都是固定的 . 在这种情况下,它可能是8或16个字节(取决于您是在32位还是64位平台上) . 如果您查看,则会报告此情况 . sizeof(node) .
sizeof(node)
根据32位或64位平台的大小差异,是因为指针 . 指针在32位平台上是32位(即4字节),在64位平台上是64位(即8字节) . int 类型在所有平台上通常为32位(4字节),但在嵌入式系统或大型机上可能有所不同 .
它在64位平台上不是12字节(4 8)的原因是因为对齐 . 编译器将确保指针处于良好的对齐状态,以加快对该成员的访问 .
2 回答
您可以使用
sizeof()
函数轻松检查它们,不仅适用于int
和指针变量,还适用于节点本身 . 通常int
和指针在32位平台上是4个字节,因此这是实现定义的,并且可能在其他平台上有所不同 .node
的总大小可能等于8,但可能不是由于上面指定的原因和\或数据对齐 .无论成员值是什么,结构的大小都是固定的 . 在这种情况下,它可能是8或16个字节(取决于您是在32位还是64位平台上) . 如果您查看,则会报告此情况 .
sizeof(node)
.根据32位或64位平台的大小差异,是因为指针 . 指针在32位平台上是32位(即4字节),在64位平台上是64位(即8字节) .
int
类型在所有平台上通常为32位(4字节),但在嵌入式系统或大型机上可能有所不同 .它在64位平台上不是12字节(4 8)的原因是因为对齐 . 编译器将确保指针处于良好的对齐状态,以加快对该成员的访问 .