2 qq 36743111 qq_36743111 于 2017.09.15 17:34 提问

链表问题!!!!!实在搞不懂 求指教

老师,你看,我在Add函数里添加节点,最后head指针指向表尾,可在主函数里调用时head又指向了表头,为什么呢?
#include
#include
struct link
{
struct link* next;
int data;
};
void Add(struct link*head);
void Free(struct link*head);
int main()
{
struct link* head=NULL,* p=NULL;
p=(struct link*)malloc(sizeof(struct link));
head=p;
head->data=100;
Add(head);
printf("%d\n",head->data);
printf("%d\n",head->next->data);
Free(head);
return 0;
}
void Add(struct link*head)
{
int i;
struct link* p=NULL;
for(i=1; i {
p=(struct link*)malloc(sizeof(struct link));
p->data=i;
p->next=NULL;
if(head!=NULL)
{
head->next=p;
head=p;
}
else
{
head=p;
}
}
}
void Free(struct link*head)
{
struct link* p=NULL;
while(head!=NULL)
{
p=head;
head=head->next;
free(p);
printf("清空\n");
}
}

2个回答

cocos_yang
cocos_yang   2017.09.16 12:01
已采纳

Add(struct link *head); //head是个形参,在函数中改变不了它的值,只能改变它指向的数据的值,如:head->data,head->next的值;

cocos_yang
cocos_yang main函数里面定义的head值一直没变过,都是main函数里你malloc后p赋给它的值。
2 个月之前 回复
qq_36743111
qq_36743111 那head值是什么
2 个月之前 回复
lihualoveyou
lihualoveyou   2017.09.15 22:01

指针使用有问题。
如果参考传递了指针,在函数中对指针进行赋值不会传递函数外面去。需要用指针的指针。

Csdn user default icon
上传中...
上传图片
插入图片