正在学习单链表,对单链表创建的函数有两处不明。一是不明白下面绿色代码的具体含义。二是,红色代码中的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 本身在内存中的地址的值,它的值是新开辟的地址的值,所以不同
很感谢你的回答。不过已经在之前弄明白了,所以已经关闭问题了。