C传址调用,两次修改*a的值,返回结果是第一个*a
巴扎黑
巴扎黑 2016-11-08 15:44:16
0
1
1035

这是C代码。

#include 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呢?


巴扎黑
巴扎黑

全員に返信 (1)
phpcn_u29

在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就没有什么关系了。所以只被赋值了第一次。

不知道这样你懂了没,我不善表达,见谅。


いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!