當我在學習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