函数 - C传址调用,两次修改*a的值,返回结果是第一个*a

查看:98
本文介绍了函数 - 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;
}

好了我们再来看。一开始da的地址。所以*d赋值就是给a赋值。但是,bc的地址,d = bd就变成c的地址了,那么给*d赋值就是给c赋值了,和a就没有什么关系了。所以只被赋值了第一次。

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

这篇关于函数 - C传址调用,两次修改*a的值,返回结果是第一个*a的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆