首页 新闻 会员 周边

同样是指针参数,为什么Merge函数改变了实参,traverse函数没有改变

0
[已解决问题] 解决于 2020-03-21 13:42

include<stdio.h>

include<stdlib.h>

typedef struct lnode{
int data;
struct lnode *next;
} lnode;

void traverse(lnode list); //遍历打印
lnode
Last(lnode* list); //定位最后一个节点
lnode* newNode(int value); //新增一个节点
void Merge(lnode* old,lnode* new); //合并两个链表

void traverse(lnode *list)
{
while(list != NULL)
{
printf("%d ",list->data);
list= list->next;
}
printf("\n");
}

lnode* Last(lnode* list)
{
while(list->next != NULL)
{
list = list->next;
}
return list;
}

lnode* newNode(int value)
{
lnode* l = malloc(sizeof(lnode));
l->data = value;
l->next = NULL;
return l;
}

void Merge(lnode* old,lnode* new)
{
Last(old)->next = new;
}

int main()
{
lnode* a = newNode(1);
Merge(a,newNode(2));
Merge(a,newNode(3));
traverse(a);
traverse(a);//同样是传入指针参数,为什么Merge函数改变了实参,traverse函数没有改变
}

c
仰望星空的耕田人的主页 仰望星空的耕田人 | 初学一级 | 园豆:6
提问于:2020-03-20 17:03
< >
分享
最佳答案
1

traverse只改变了指针变量,merge改变了指针指向的东西,改指针变量的值和改int double这些标量的值是一样的

奖励园豆:5
jakio6 | 小虾三级 |园豆:1318 | 2020-03-20 17:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册