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

Chi*_*nna 6 c linux variables

如果我编译并运行以下代码,则打印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)

  • 所以它可以打印一个垃圾值,包括`0` ..对!! (2认同)

小智 8

假设您正在使用gcc,您可能需要打开-Wshadow(http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html).这将在与外部具有相同名称的内部变量处弹出错误.零是随机值.它可以在那个地方打印任何垃圾.