c指针在函数调用过程中的问题

</pre><p></p><pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
int *c;
void f(int *b)
{
	int a = 10;
	b = &a; 
}
int main()
{
	int tmp;
	f(&tmp);
	printf("%d\n",tmp);
	return 0;
}

上面这段代码打印的结果是:2130567168

分析一下就可以知道,变量tmp的地址传递到函数f()中,指针b的值就是tmp的地址,后面b的值变成了a的地址,所以函数f()调用结束后,tmp地址存的值并没有发生

变化。局部变量未初始化,打印的值随机。

稍微改一下:

#include <stdio.h>
#include <stdlib.h>
int *c;
void f(int *b)
{
	int a = 10;
	b = &a; 
}
int main()
{
	int *tmp;
	f(tmp);
	printf("%d\n",*tmp);
	return 0;
}

这样输入的结果是:0

这个函数分析一下就是,指针tmp传入函数f中的b变量,相当于b=tmp,随后b=&a,这一过程tmp指针的内容并没有发生改变,所以打印出来指针指向的地址值是随机的

再修改一下程序:

#include <stdio.h>
#include <stdlib.h>
int *c;
void f()
{
	int a = 10;
	c = &a; 
}
int main()
{
	int *tmp;
	f();
	printf("%d\n",*c);
	return 0;
}

这样得到的结果是:10

这一过程指针c的值是a的地址,所以打印c指向的数值就是a的值

-------------------------------------------分割线--------------------------------------------------------------------------------

所以要想获得a的值,要么传递指针后,指针指向的地址存入a的值(而不是a的地址)

要么就是获得a的地址,通过return或者全局变量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值