关于指针的困惑(请高手指点)
#include<stdio.h>#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
}L;
void creat(L*l)//创建链表
{
L *p,*q;
l=(L*)malloc(sizeof(node));
l->next=NULL;
p=l;
q=(L*)malloc(sizeof(node));
printf("请输入数据:\n");
scanf("%d",&(q->data));
while(q->data!=-1)
{
q->next=p->next;
p->next=q;
p=q;
q=(L*)malloc(sizeof(node));
scanf("%d",&(q->data));
}
// return l;
}
void printlist(L *l)//输出
{
L*p;
p=l;
while(p->next!=NULL)
{
printf("%d",p->next->data);
p=p->next;
}
}
int main()
{
L*l;
creat(l);
printlist(l);
return 0;
}
指针不是可以对形参内容进行修改吗?但为什么上面的程序得不到结果呢如果把程序改成:
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
}L;
L* creat(L*l)//创建链表
{
L *p,*q;
l=(L*)malloc(sizeof(node));
l->next=NULL;
p=l;
q=(L*)malloc(sizeof(node));
printf("请输入数据:\n");
scanf("%d",&(q->data));
while(q->data!=-1)
{
q->next=p->next;
p->next=q;
p=q;
q=(L*)malloc(sizeof(node));
scanf("%d",&(q->data));
}
return l;
}
void printlist(L *l)//输出
{
L*p;
p=l;
while(p->next!=NULL)
{
printf("%d",p->next->data);
p=p->next;
}
}
int main()
{
L*l;
l=creat(l);
printlist(l);
return 0;
}
就可以得到结果了呢???