投稿 资料上传 提问 搜索
您现在的位置是: 首页 > 问答 > 正文

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

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函数没有改变
}


问题回复
  1. 雾以泪聚
    雾以泪聚IT技术之家

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

    回复