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
相关产品推荐
相关产品推荐

