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

为何C语言代码中4与5的差值计算结果为4而非-1?

问题原因解析

我们一步步拆解函数执行的过程,就能明白为什么b的结果是4而非-1:

  • 初始状态:main函数里a=4,b=5,指针p指向a,指针q指向b。
  • 调用fun(p,q)后,第一步执行*a = *a + *b:这里的*a对应main里的变量a,计算后a的值变成4+5=9。
  • 第二步执行*b = *a - *b:注意此时*a已经是修改后的9,而*b还是初始的5,所以计算结果是9-5=4,也就是main里的b被赋值为4。

你预期的b=-1,应该是想用原始的a值减去原始的b值(即4-5=-1),但因为第一步操作已经修改了*a的取值,第二步计算时用的是更新后的a,自然得不到预期结果。如果要实现这个预期,需要先把原始的*a或*b值暂存到临时变量中,比如:

int fun(int *a, int *b){
  int temp = *a; // 保存原始a的值
  *a = *a + *b;
  *b = temp - *b; // 用原始a值计算
}

内容的提问来源于stack exchange,提问作者Aevo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:42:38