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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:10:31