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

C语言自定义函数中的变量是否必须要赋予初始值?

C语言局部变量初始化问题解答

C语言中自定义函数内的普通局部变量没有默认初始值,如果需要在写入操作前读取该变量的值,必须手动赋初始值,否则会出现未定义行为。

原因说明

  • 函数内部定义的、无static修饰的变量属于自动存储类型,会被分配在进程的栈空间。栈空间的内存只会做分配和回收操作,不会自动做清零处理,变量的初始值就是对应内存地址中之前操作遗留的随机垃圾值,你遇到的输出168就是典型的垃圾值表现。
  • 只有两类变量会被C语言默认初始化为0:
    • 定义在函数外的全局变量
    • 函数内部用static关键字修饰的静态局部变量
      这两类变量分配在静态存储区,程序加载阶段就会被自动初始化为0,不需要手动赋值也能读到正确的0值。

在你编写的numberOfDigits函数中,digits属于普通自动局部变量,需要用来做累加计数,初始值必须为0,所以必须手动赋值,否则随机的初始值会导致计数结果完全不符合预期。

参考代码

#include <stdio.h>

void numberOfDigits(int num);

void main()  
{   
    int num;
    printf("Enter integer :");
    scanf("%d",&num);
    numberOfDigits(num);
}

void numberOfDigits(int num)
{
    int nc=num, digits=0;

    while(nc>0)
    {
        nc=nc/10;
        digits++;
    }
    printf("Number of digits in %d are %d\n",num,digits);   
}

内容的提问来源于stack exchange,提问作者Hasini Chakreshwari Dahanayake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:24:02