变量默认值

时间:2014-07-05 06:23:20

标签: c default-value

我对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,并且我获得了垃圾值。请帮助我解决这些困惑。

  3. 谢谢。

2 个答案:

答案 0 :(得分:3)

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

全局变量和静态局部变量初始化为零。除非在当然宣布时初始化。

答案 1 :(得分:1)

默认值:

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

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

换句话说,在整个程序执行期间,此地址不变,并且为此类变量设置默认值本质上意味着将代码添加到程序中。

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

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