为什么链表操作的函数的参数是双指针型变量

空指针异常,奔溃图

/*为了便于理解,下面的代码是一个抽象的类似于链表的函数操作*/
#include<stdio.h>
#include<stdlib.h>

#define TTEM int
typedef TTEM * intp;

intp test1(intp pf);
/*类似于普通变量的传值函数*/
intp test2(intp *pf);
/*类似于普通变量的传址函数*/
int main(void)
{
    intp p1,p2;
    int a1 = 1,a2 = 2;
    p1 = &a1;
    p2 = &a2;
    printf("*p1:%p,%d\n",p1,*p1);
    printf("*p2:%p,%d\n",p2,*p2);
    printf("%s\n",test1(p1));  
    /*地址为空,即(void*)0 == null*/
    printf("%s\n",test2(&p2)); 
    /*地址为空,即(void*)0 == null*/
    /*注意:0,null和'\0'虽然数值是相等的,但是意义不同,不懂请百度*/    
    putchar('\n');
    printf("*p1:%p,%d\n",p1,*p1);   
    /*函数没有改变[指针变量]的值*/
    printf("*p2:%p,%d\n",p2,*p2);  
    /*空指针异常,导致奔溃*/
    /*运行到这一句,程序奔溃*/
    system("pause");
    return 0;
}
/*传值函数,得到一个[副本],不会影响原[变量]*/
intp test1(intp pf)
{
    pf = NULL;/*将该[变量]的内容置空*/
    //*pf = 1000;
    /*对于pf指向的变量是可以改变的*/
    return pf;
}
/*传址函数,沿用原[变量],会影响原[变量]*/
intp test2(intp *pf)
{
    *pf = NULL;/*将该[变量]的内容置空*/
    //**pf = 1000;
    /*对于pf指向的变量是可以改变的*/
    return *pf;
}
/*上述的[副本]指[指针变量]存储的[内容副本]*/
/*[内容副本]指存储数值变量的[地址],如变量a1,a2*/
/*上述将的[变量]是指[指针变量]*/

/*
*
通过上面的代码得出:
①如果使用[intp]变量做参数,变量pf在函数中的改变不能影响到主函数中传递过来的相应变量;<-test1
②如果使用[intp *]变量做参数,变量 pf在函数中的改变能影响到主函数中传递过来的相应变量;<-test2

注意:请将intp类型和int类型的做参数的函数进行类比,如果你到现在还没有看懂
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值