为什么printf()在下面的代码中打印0而不是10?

如果我编译并运行下面的代码,它打印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); } }