關於結構體地址與結構體指針的一些分析

 當我在學習C語言的鏈表實現時,遇到了一些問題,一般鏈表的表頭是經過結構體建立的,而表頭中包含所須要指向的第一個節點與整個鏈表長度等信息,對於在表頭中所存儲的地址信息感到一點疑惑。
如一下建立的一個單向鏈表:ide

typedef struct _tag_LinkListNode LinkListNode;       //結點取別名

struct _tag_LinkListNode
{
    LinkListNode* next;
};       // 結點指針域定義      

typedef struct _tag_LinkList
{
    LinkListNode header;
    int length;
} TLinkList;        //頭結點定義

struct Value
{
    LinkListNode header;
    int v;
};           //數據域定義

此時有以下問題:
1.TLinkList中的header存儲的是什麼?
2.TLinkList的長度是多大?
3.TLinkList的鏈表與第一個結點是如何關聯的?學習

void main(void)
{
    struct  Value v1;
    v1.v = 1;

    TLinkList* list = (TLinkList*)malloc(sizeof(TLinkList));    //建立鏈表
    LinkListNode* current = (LinkListNode*)list;             //將鏈表強制類型轉換

    printf("list size is %d\n",sizeof(list));
    printf("&list address is %p\n", &list);                      
    printf("list address is %p\n", list);
    printf("&(list->header) address is %p\n", &(list->header));

    printf("TLinkList size is %d\n", sizeof(TLinkList));
    printf("list->header value is %p\n",list->header);
    printf("&v1 address is %p\n", &v1);
    printf("&(v1->header) address is %p\n", &(v1.header));
    printf("&(list->length) address is %p\n", &(list->length));
    printf("list length value is %d\n", list->length);
    free(list);
}

其輸出結果爲;指針

list size is 4
&list address is 0113FBE8
list address is 014CF558
&(list->header) address is 014CF558
TLinkList size is 8
list->header value is 0113FBF4
&v1 address is 0113FBF4
&(v1->header) address is 0113FBF4
&(list->length) address is 014CF55C
list length value is 0

根據輸出結果,知道header中存儲的爲其指向結點的地址,TLinkList的長度爲8,其地址能夠用下圖表示:
關於結構體地址與結構體指針的一些分析code

相關文章
相關標籤/搜索