变量默认值

我对C编程中的一些基本理论感到困惑:

  1. 不同数据类型的变量的默认值是什么? 示例:如果我按照标准C手册声明如下结果可能是由传奇Dennis Ritchie博士记录的结果?

    int x; printf("%d",x); 

    我知道一些GCC编译器将打印0和一些打印垃圾值。 这取决于编译器。 请根据Dennis Ritchie C编程文档给我一个独特的答案。

    同上,请给我回答float,char,double,string,array和pointer。

  2. 如果我声明并打印指针如下:

     int *pt; printf("%d",pt); 

    什么将在屏幕上打印? 我使用了MinGW GCCcompiler版本3.4.2,并且我获得了垃圾值。 请帮助我解决这些困惑。

谢谢。

局部(非静态)变量的值是不确定的,即您无法告诉它们的值。 使用未初始化的非静态局部变量会导致未定义的行为

全局变量和静态局部变量初始化为零。 除非在声明时进行初始化。

默认值:

  • 静态局部变量:0
  • 静态全局变量:0
  • 非静态全局变量:0
  • 非静态局部变量:无

函数中非静态局部变量的地址取决于调用函数时执行点的堆栈状态(SP寄存器的值)。

换句话说,在整个程序执行期间,该地址不是恒定的,并且将默认值设置为这样的变量本质上意味着向程序添加代码。

因此,标准没有为非静态局部变量定义默认值,以便程序员可以选择是否添加这段额外的代码。

所有其他类型的变量在程序执行期间在内存中都有常量地址,因此将它们设置为默认值并不意味着向程序添加代码(它们的初始值基本上是可执行映像的一部分)。