84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
这是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就没有什么关系了。所以只被赋值了第一次。
不知道这样你懂了没,我不善表达,见谅。
在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就没有什么关系了。所以只被赋值了第一次。
不知道这样你懂了没,我不善表达,见谅。