如果我编译并运行以下代码,则打印0而不是10.
#include<stdio.h>
main()
{
int Var=10;
{
char Var=Var;
printf("%d",Var);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这是打印0,为什么不是10?
Bas*_*tch 19
因为在当地申报
char Var=Var;
Run Code Online (Sandbox Code Playgroud)
正确的发生是Var指本地Var,而不是上位.正如Alk评论的那样,这是从未初始化的变量中分配的未定义行为.
所以你的声明根本没有初始化Var,即Var包含垃圾.在您的特定情况下,该垃圾恰好为0.
顺便说一句,Var在同一个函数中有两个同音异义词真的很糟糕.
正如这个答案所暗示的,你应该编译gcc -Wall -Wshadow然后你会得到一些关于你的代码的警告.(还添加-g以获取调试信息以便能够调试gdb)
小智 8
假设您正在使用gcc,您可能需要打开-Wshadow(http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html).这将在与外部具有相同名称的内部变量处弹出错误.零是随机值.它可以在那个地方打印任何垃圾.