2017-04-26 37 views
0

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

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

+2

它是'16'字节。 – BLUEPIXY

+0

清除它。谢谢! – Calin

回答

1

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