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

为何以下C语言代码中M的输出始终为1?

问题分析与解决:变量初始化顺序错误导致的异常输出

问题根源

你这段代码的核心问题是变量初始化时机错误:

  • 执行int N,M=N;时,N是未初始化的自动局部变量,它的初始值是内存中的随机垃圾值(这次刚好是1),M此时直接复制了N的这个不确定值。
  • 后续通过scanf("%d",&N);给N赋值,只会修改N本身,不会改变已经完成初始化的M,所以M输出的始终是一开始的随机值。
  • 而当你给N显式指定初始值(比如int N=3,M=N;)时,N先被初始化,M再用N的确定值初始化,所以两者输出一致。

修正方案

要实现“让M等于用户输入的N”,需要先读取N的值,再将N赋值给M,代码调整如下:

#include<stdio.h>
#include<conio.h>
int main() // 遵循C标准,main函数应返回int类型
{ 
    clrscr();
    int N;    
    // 先读取用户输入的N
    scanf("%d",&N); 
    // 读取完成后,再将N的值赋值给M
    int M = N; 
    printf("%d",M);  
    getchar();
    return 0;
}

额外说明

C语言中,函数内的自动局部变量(未加static修饰)如果没有显式初始化,其值是未定义的,访问这类变量会触发未定义行为,输出结果完全依赖当前内存状态,可能每次运行都不一样,这次输出1只是偶然情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:45:46