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

C语言long类型默认值问题:未初始化long变量为何值为1而非0

问题根因

你对C语言变量默认初始值的认知存在错误,C语言不会为非静态局部变量做默认初始化:

  • 只有全局变量、被static修饰的静态局部变量,才会在程序加载时被默认初始化为0
  • 你代码中定义在main函数内的xno、zno都属于自动存储类(auto)的局部变量,分配在程序栈空间,创建时不会主动擦除或初始化对应内存区域,取值就是栈内存之前遗留的脏数据,你本次运行得到zno=1、xno=0完全是当前运行环境下的随机结果,换编译参数、换操作系统甚至同环境多次运行都可能得到不同值。

额外的代码问题

你的代码还存在格式化字符不匹配的未定义行为:printf输出long类型变量应该用%ld占位符,你用了适配int类型的%d,类型不匹配的情况下输出结果本身也不可靠。

修正方案

如果需要局部变量初始值为0,主动手动初始化即可,示例如下:

#include <stdio.h>

long add(long, long);

int main()
{
    long xno = 0;
    long zno = 0;
    long sum;

    printf("xno = %ld, zno = %ld \n", xno, zno);

    sum = add(xno, zno);

    printf("sum = %ld", sum);
    return 0;
}

long add(long x, long y) {
    printf("x = %ld, y = %ld \n", x, y);
   return x + y;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:06:05