为何C语言中被调用函数与调用函数内的变量值不一致?
函数返回值未正确定义导致变量值不一致的原因分析
问题代码
#include<stdio.h> int pass(a); int main() { int x,y; printf("Hello world\n"); printf("Enter the x "); scanf("%d",&x); y = pass(x); printf("value of y %d",y); return 9; } pass(m) { m = m + 5; printf("Value of m %d\n",m); // return 5; }
运行输出
Hello World
Enter the x 1
Value of m 6
value of y 13
核心原因
- 函数未返回指定类型的值:你声明
pass是返回int类型的函数,但实际函数体内把return语句注释掉了,没有返回任何值。这在C语言中属于未定义行为——当调用这类函数时,程序会从函数调用的栈帧里随机读取一个值作为返回结果,你看到的13就是栈里的垃圾数据,和函数内的m值完全无关。 - 另外你的函数定义写法是老式C的风格,现代C标准(C99及以后)要求显式声明参数类型,比如应该写成
int pass(int m),避免隐式类型带来的潜在问题。
修复方式
想要让y和m的值一致,只需要在pass函数中取消注释return语句,改成返回m即可:
int pass(int m) // 补充参数类型,符合现代C标准 { m = m + 5; printf("Value of m %d\n",m); return m; // 返回计算后的m值 }
内容的提问来源于stack exchange,提问作者Moorthi D
相关产品推荐
相关产品推荐

