0

我正在阅读 Stephen G. Kochan 所著的第六版“Objective-C 编程”一书。它在第 144 页上有以下声明,这让我感到困惑:

作为基本 C 数据类型的局部变量没有默认初始值,因此您必须在使用它们之前将它们设置为某个值。

然而,当我有以下代码时,它仍然有效,并显示 0:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    int number;
    NSLog(@"%i", number);

    return 0;
}

不是int基本的 C 数据类型吗?

4

2 回答 2

7

“基本C数据类型没有默认初始值”,这并不意味着如果你不初始化它们就没有值,只是你不会事先知道那个值是什么。

在您的情况下,它number恰好有一个零,但它可能具有其他值。

于 2014-05-01T02:59:16.790 回答
4

局部变量在堆栈上分配。局部变量的初始值没有保证值。相反,局部变量的值完全取决于使用堆栈特定区域的前一个函数留下的任何随机值。

main函数的情况下,局部变量的初始值似乎是可预测的,因为main它是第一个运行并使用堆栈区域的函数。但是,编译器不做任何努力,语言规范也没有要求保证局部变量的初始值。

总之,始终在使用局部变量之前显式初始化它们。

于 2014-05-01T03:19:01.457 回答