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
相关产品推荐
相关产品推荐

