我对C编程中的一些基本理论感到困惑:
不同数据类型的变量的默认值是什么?示例:如果我按照标准C手册声明如下结果可能是由传奇Dennis Ritchie博士记录的?
int x;
printf("%d",x);
我知道一些GCC编译器会打印0和一些打印垃圾值。这取决于编译器。请根据Dennis Ritchie C编程文档给我一个独特的答案。
与上面相同,请给我回答float,char,double,string,array和pointer。
如果我声明并打印指针如下:
int *pt;
printf("%d",pt);
屏幕上会打印什么?我使用了MinGW GCCcompiler版本3.4.2,并且我获得了垃圾值。请帮助我解决这些困惑。
谢谢。
答案 0 :(得分:3)
本地(非静态)变量的值是不确定的,即您无法告诉它们的值。使用未初始化的非静态局部变量会导致undefined behavior。
全局变量和静态局部变量初始化为零。除非在当然宣布时初始化。
答案 1 :(得分:1)
默认值:
函数中非静态局部变量的地址取决于调用函数时执行点的堆栈状态(SP寄存器的值)。
换句话说,在整个程序执行期间,此地址不不变,并且为此类变量设置默认值本质上意味着将代码添加到程序中。
因此标准没有为非静态局部变量定义默认值,以便程序员可以选择是否添加这段额外的代码。
所有其他类型的变量 do 在整个程序执行期间在内存中都有常量地址,因此将它们设置为默认值并不意味着向程序添加代码(它们的初始值是基本上是可执行映像的一部分。)