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

C语言函数参数与返回值问题:调用g(3,-10)为何未得预期-24?

问题分析:为什么g(3, -10)返回-4而不是预期的-24?

首先先把你的代码贴出来,方便我们一步步拆解:

#include <stdio.h>
int g (int x, int y) {
    x = x + y;
    int z = 2 * x - y;
    return z;
}
int main() {
    printf("Hello World%d\n", g(3, -10));
    return 0;
}

我们跟着代码的执行流程走一遍,就能找到问题所在:

  • 调用g(3, -10)时,初始传入的参数是x=3,y=-10
  • 第一步执行x = x + y:这一步直接修改了x的值,计算后x变成 3 + (-10) = -7
  • 第二步计算z = 2 * x - y:这里用的是修改后的x=-7,代入后得到 2*(-7) - (-10) = -14 + 10 = -4
  • 最后返回z=-4,这就是你实际看到的结果

你预期得到-24,大概率是手动计算时忽略了「函数内部会先修改x的值」这个细节,直接用原始的x=3去推导公式了。

如果你的目标确实是让函数返回-24,需要先明确你想要的数学表达式是什么,再调整代码逻辑:
比如如果对应的公式是2*x + 3*y,那修改后的函数会是这样:

int g (int x, int y) {
    int z = 2 * x + 3 * y; // 代入x=3,y=-10:6 + (-30) = -24
    return z;
}

要是你不想修改原始的x值,也可以用临时变量存储x+y的结果,避免覆盖原始参数:

int g (int x, int y) {
    int temp = x + y; // 用临时变量保存计算结果,不修改原始x
    int z = 2 * x - y; // 这里用原始x计算,结果会是16
    return z;
}

总结一下:结果和预期不符的核心原因是函数内部先覆盖了x的值,后续计算用的是修改后的x,而非你预期的原始参数值,理清这个逻辑后调整代码就能得到你想要的结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:12:42