十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
当我在学习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 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,其地址可以用下图表示: