同一行声明多个整型变量仅初始化一个,输出异常的原因是什么?
问题原因解析
你的代码出现异常是因为对C语言变量声明初始化的规则理解有误:
- 语句
int num1, num2, num3 = 9;仅对num3完成了初始化赋值(值为9),num1和num2只是被声明为整型变量,并没有被初始化。 - 在C语言中,函数内部的局部自动变量(非
static修饰)会占用栈内存空间,这些空间里残留着之前程序运行留下的随机数据。未初始化的这类变量值是不确定的,打印它们会得到随机垃圾值(比如你看到的0和13637000,每次运行结果可能都不同),这属于C语言里的未定义行为。
你误以为逗号分隔的变量会被批量赋值为9,但C语言语法不支持这种写法。如果要让三个变量都初始化为9,正确写法有两种:
写法一:声明时逐个初始化
#include<stdio.h> int main(){ int num1 = 9, num2 = 9, num3 = 9; printf("%d ", num1); printf("%d ", num2); printf("%d ", num3); }
写法二:先声明变量再统一赋值
#include<stdio.h> int main(){ int num1, num2, num3; num1 = num2 = num3 = 9; printf("%d ", num1); printf("%d ", num2); printf("%d ", num3); }
内容的提问来源于stack exchange,提问作者Samit Raina
相关产品推荐
相关产品推荐

