关于结构体地址与结构体指针的一些分析
当我在学习C语言的链表实现时,遇到了一些问题,通常链表的表头是通过结构体创建的,而表头中包含所需要指向的第一个节点与整个链表长度等信息,对于在表头中所存储的地址信息感到一点疑惑。
如一下创建的一个单向链表:
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 0113FBE8list address is 014CF558&(list->header) address is 014CF558TLinkList size is 8list->header value is 0113FBF4&v1 address is 0113FBF4&(v1->header) address is 0113FBF4&(list->length) address is 014CF55Clist length value is 0
根据输出结果,知道header中存储的为其指向结点的地址,TLinkList的长度为8,其地址可以用下图表示:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。