【问题标题】:Is an int in Objective-C automatically initialized to 0? [duplicate]Objective-C 中的 int 是否自动初始化为 0? [复制]
【发布时间】:2014-06-17 13:21:48
【问题描述】:

我正在阅读 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 数据类型吗?

【问题讨论】:

标签: objective-c c int local-variables variable-initialization


【解决方案1】:

“Basic C data types have no default initial value”,并不是说不初始化就没有值,只是事先不知道那个值是什么。

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

【讨论】:

  • 所以基本上它有点随机?我应该始终初始化并且不能指望它始终为 0?我在某处读到,这取决于特定时间内存位置中的内容。
  • @user3451821 是的,是的。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-01-23
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多