我试图更好地理解链表中的内存是如何分配的,所以我制作了一个简单的程序,以查看地址的存储位置。
#include <stdio.h>
struct node {
int data;
struct node* next;
};
int main()
{
struct node first;
struct node second;
struct node third;
struct node *aux; //pointer to go through list
first.data = 1;
second.data = 2;
third.data = 3;
first.next = &second;
second.next = &third;
third.next = NULL;
aux = &first;
while (aux)
{
printf("%p\n", aux); //printing each address
aux = aux->next;
}
return 0;
}
我们得到了输出:
0x7fff14fabac0
0x7fff14fabad0
0x7fff14fabae0
因此节点之间存在1个字节的差异。
所以基本上第一个=第二个 - 1.因为sizeof(int)等于4个字节,内存中是否有空格用于整数?我们只提前1个字节?
答案 0 :(得分:1)
你忽略了最后一位数,差别是16个字节。 16个字节很可能是系统8字节对齐的结果。