传指针and解引用

一个函数的改变要影响另一个函数需要两个条件:

1、传指针。

2、解引用。

通过交换a和b数值的实例来说明其重要性:

在主函数中输入a和b的值;int a = 10;int b = 20;预期输出结果为a = 20;b = 10。

1、

明显与预期结果不符。原因:没有传指针!

2、

具体操作为:

也与预期结果不符。原因:没有解引用。

3、

与预期相符,多测试几组有代表性的数据。既传指针又解引用,交换了两个数据的值。

在这个例子中,除了1、2两种可能的问题外,还可能出现以下这种错误。

系统直接崩溃。原因:定义的tmp是一个野指针。

野指针,也叫悬挂指针,即未初始化的指针,没有访问权限的地址(指针)。

注意:野指针不是空指针。

空指针:NULL,表明当前的指针无效。注意:不能对一个无效的指针解引用。

Todo:如下程序:

int a = 10;
int *p = &a;
p = NULL;

printf("%d\n",*p); 

程序会崩溃,因为不能对一个无效的指针解引用。现将其中的p = NULL;用功能函数Fun(p)替换,Fun函数为:

void Fun(int *p)
{
p=NULL;

}

这时候打印结果为*p = 10,Fun函数貌似无效。那么,问题1、为什么更改后的程序不崩溃,2、如果想使其崩溃应该如何修改?

答:因为其函数内部没有解引用。要想解引用,就必须加一个二级指针进去。

应该改为:

void Fun(int **p)
{
*p=NULL;
}
int main()
{
int a = 10;
int *p = &a;
Fun(&p);
printf("%d\n",*p);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值