我正在读一本名为“Objective-C编程”的书,第六版,Stephen G. Kochan。它在第144页上有以下声明,这让我感到困惑:
作为基本C数据类型的局部变量没有默认初始值,因此在使用它们之前必须将它们设置为某个值。
然而,当我有以下代码时,它仍然有效,并显示0:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
int number;
NSLog(@"%i", number);
return 0;
}
int
不是基本的C数据类型吗?
答案 0 :(得分:7)
“基本C数据类型没有默认的初始值”,但这并不意味着如果你没有初始化它们就没有值,只是你不会事先知道那个值是什么。
在你的情况下,number
碰巧有一个零,但它可能有其他价值。
答案 1 :(得分:4)
在堆栈上分配局部变量。局部变量的初始值没有保证值。相反,局部变量的值完全取决于使用堆栈特定区域的前一个函数留下的任何随机值。
在main
函数的情况下,局部变量的初始值似乎是可预测的,因为main
是第一个运行和使用该堆栈区域的函数。但是,编译器不费力,并且语言规范没有要求,以保证局部变量的初始值。
总之,在使用局部变量之前,请始终显式初始化它们。