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

这是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呢?


巴扎黑
巴扎黑

全部回复(1)
面对疾风吧

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

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


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号