如果我编译并运行下面的代码,它打印0而不是10。
#include<stdio.h> main() { int Var=10; { char Var=Var; printf("%d",Var); } }
为什么这是打印0,为什么不是10?
因为在地方申报
char Var=Var;
Var
的正确发生是指当地的Var
,而不是上一个。 Alk评论说,这是未定义的行为 ,从未初始化的变量分配。
所以你的声明不会初始化Var
,即Var
包含垃圾。 在你的具体情况下,那个垃圾恰好是0。
顺便说一下,在同一个函数中有两个同音异形是非常不好的味道。
正如这个答案所建议的,你应该使用gcc -Wall -Wshadow
进行编译,然后你会在代码中得到一些警告。 (也可以添加-g
获取调试信息,以便能够使用gdb
进行调试)
假设你使用的是gcc,你可能想打开-Wshadow( http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html )。 这会弹出一个错误,在内部变量与外部具有相同的名称。 零是一个随机值。 它可以在那个地方打印任何垃圾。
尝试这个
#include<stdio.h> main() { int Var1=10; { char Var=Var1; printf("%d",Var); } }