正在学习单链表,对单链表创建的函数有两处不明。一是不明白下面绿色代码的具体含义。二是,红色代码中的q->next和&l打印出来不应该是一样的吗,不都是l的地址吗?
# include <stdio.h>
# include <stdlib.h>
typedef struct linklist
{
int data;
struct linklist *next;
}list,*link_list;
link_list create_linklist(link_list l, int n)//创建单链表
{
link_list p,q;
int i,x;
l=(list*)malloc(sizeof(list));//创建单链表头结点
l->next=NULL;
l->data=5;
q=l;
printf("%d:\n",*l);
q->next=l;
printf("%d,%d,%d",q->data,q->next,&l); //函数本来不需要上面3行代码,只是我尝试理解代码时写的打印而已
for(i=1;i<=n;i++)
{
p=(list*)malloc(sizeof(list));//产生一个新结点
scanf("%d",&x);
p->data=x;
p->next=NULL;
q->next=p;
q=q->next;
}
return l;
}
int main()
{
link_list l;
create_linklist(l, 0);
}
一是不明白下面绿色代码的具体含义。q=l;//意思是,将l的值给q,而l的值是新开辟的地址的值
//所以q 和 l 的值都是新开辟的这个地址的值
二是,红色代码中的q->next // 你的红色代码中有这一语句:q->next=l;那么它会自身成环,【此时的 q的值和 l的值相同】
//所以q->next打印出的是新开辟的地址的值
&l // 打印出的是 l 本身在内存中的地址的值,它的值是新开辟的地址的值,所以不同
很感谢你的回答。不过已经在之前弄明白了,所以已经关闭问题了。