解决遍历链表会改变头指针指向的问题

写了两个函数,它们都能输出链表的值,但第二个函数会将头节点的指向置为空。

这是结构体本身:

输出结果:

第一个函数与第二个函数相同,但是第二个函数使用过后,导致头节点置为空

第一个函数原理:(改变的是指针指向,与头节点无关)

#include<stdio.h>
struct dog //定义结构体
{
    int name;//结构体里面定义一个变量叫做name
};

void fun(struct dog *f1,struct dog *f2)//通过函数传值改变
{
    f1 = f2;//把结构体f2赋值给f1
}

int main()
{
    struct dog f1,f2;
    f1.name = 10;//给结构体f1的name赋值为10
    f2.name = 20;//给结构体f2的name赋值为20
    fun(&f1,&f2);
    printf("%d",f1.name);
    return 0;
}

第二个函数原理:(通过传地址改变结构体里变量的值)

#include<stdio.h>
struct dog //定义结构体
{
    int name;//结构体里面定义一个变量叫做name
};

void fun(struct dog *f1)//通过函数传值改变
{
    f1->name = 20;
}

int main()
{
    struct dog f1;
    f1.name = 10;//给结构体赋值为10
    printf("%d\n",f1.name);
    fun(&f1);//调用函数改变name的值;
    printf("%d",f1.name);
    return 0;
}

总结:
因为这两个函数都是通过传过来的一个头节点的地址来访问链表,因此在第一个函数里f1是一个struct dog型的指针,它指向的的是传过来的头节点的地址,因此改变f1的值只是改变f1的指向,因此不会影响头节点的值,但f1->next指向的是头节点next的地址,改变f1->next的值则会改变头节点的next的值因此操作完成后会把头节点指向空

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值