函数 - C传址调用,两次修改*a的值,返回结果是第一个*a
本文介绍了函数 - C传址调用,两次修改*a的值,返回结果是第一个*a的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
这是C代码。
#include <stdio.h>
void func(int *a){
*a = 2;
int c = 3;
int *b = &c;
a = b;
*a = 3;
}
void main(){
int a = 1;
func(&a);
printf("%d\n", a);
}
运行结果是
2
为什么a的结果不是3呢?
解决方案
在func
函数中,你可以将int *a
写成int* a
,这样就一目了然了,a
是形参。一开始,a
的值是main
函数里a
的地址。这样我们把func
形参a
换个名字,就叫做d
吧。这样整个函数就变成这样了:
void func(int* d)
{
*d = 2;
int c = 3;
int* b = &c;
d = b;
*d = 3;
}
好了我们再来看。一开始d
是a
的地址。所以*d
赋值就是给a
赋值。但是,b
是c
的地址,d = b
,d
就变成c
的地址了,那么给*d
赋值就是给c
赋值了,和a
就没有什么关系了。所以只被赋值了第一次。
不知道这样你懂了没,我不善表达,见谅。
这篇关于函数 - C传址调用,两次修改*a的值,返回结果是第一个*a的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文