一、未定义变量的初始值和变量作用域
下列 C/C++代码的输出结果是什么:
1 2 3 4 5 6 7 8 9 10 |
#include <stdio.h> int i = 1; int main(){ int i = i; printf("%d ", i); return 0; } |
c 语言中,局部变量的优先级会高于全局变量。这里 int i = i;
中的 i
和全局变量中的 i
是无关的。
对于全局变量和静态变量,没有初始化系统会默认置零。而局部变量和自动变量没有初始化初始值是一个随机的未定义的值。所以这里的输出也是一个无法预见的值。
经过测试,在较高标准的编译环境中,不管是全局变量还是局部变量,都会默认初始化为 0 。
本例在 【VC6 】环境下 i 是随机值,在 【gcc version 4.4.7 20120313 (Red Hat 4.4.7-18 】环境下 i 是 0 。
评论