链表基本内存(C中)

时间:2017-04-26 19:36:02

标签: c list memory memory-address

我试图更好地理解链表中的内存是如何分配的,所以我制作了一个简单的程序,以查看地址的存储位置。

#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个字节?

1 个答案:

答案 0 :(得分:1)

你忽略了最后一位数,差别是16个字节。 16个字节很可能是系统8字节对齐的结果。