这是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呢?
这是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
吧。这样整个函数就变成这样了:好了我们再来看。一开始
d
是a
的地址。所以*d
赋值就是给a
赋值。但是,b
是c
的地址,d = b
,d
就变成c
的地址了,那么给*d
赋值就是给c
赋值了,和a
就没有什么关系了。所以只被赋值了第一次。不知道这样你懂了没,我不善表达,见谅。