You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何在后续计算中使用参数初始值而非更新后的值?

解决方法:保留原始输入值进行运算

你的问题出在第一个赋值语句直接修改了*a指向的内存值,把最初的4覆盖成了9,导致后续计算*b时无法再获取到原始的a值。下面是两种清晰的解决方案:

方案一:保存所有原始输入值(最直观易维护)

在函数开头用临时变量把a和b的原始值存起来,后续所有运算都基于这些临时变量:

void update(int *a, int *b) {
    // 保存原始输入的a和b值
    int original_a = *a;
    int original_b = *b;
    
    *a = original_a + original_b; // 4+5=9,正确更新a
    *b = abs(original_a - original_b); // 用原始值计算|4-5|=1,正确更新b
}

方案二:仅保存原始a值(更简洁)

因为在修改*a之后,*b还没有被更新,所以我们只需要保存原始的a值即可:

void update(int *a, int *b) {
    int original_a = *a; // 先把原始的4存起来
    
    *a = original_a + *b; // 更新a为9
    *b = abs(original_a - *b); // 这里*b还是原始的5,所以计算|4-5|=1
}

为什么原来的代码会出错?

你原来的代码中,*a = *a + *b;执行后,*a指向的内存内容已经从4变成了9。后续执行*b = abs(*a - *b);时,*a取到的是更新后的9,所以算出来的是|9-5|=4,这和你想要的结果不符。通过提前保存原始值,就能避免这个问题。

内容的提问来源于stack exchange,提问作者Evan Ross Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:55:35