一、未定义变量的初始值和变量作用域
下列 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 。



![面试题:C++中malloc/free/new/delete/new[]/delete[]的差别](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2019/12/864e1-imageb1f021a814373489.png)









评论