2014-05-01 72 views
0

我正在閱讀Stephen G. Kochan編寫的第六版「Objective-C編程」一書。它有以下語句在頁面上144使我感到困惑:Objective-C中的int是否自動初始化爲0?

作爲基本C數據類型的局部變量沒有默認初始值,因此您必須在使用它們之前將它們設置爲某個值。

然而,當我有下面的代碼,它仍然有效,並顯示0:

#import <Foundation/Foundation.h> 

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

    return 0; 
} 

是不是int一個基本的C數據類型?

+0

密切相關:[C中int數組的初始值](http://stackoverflow.com/q/1414215) –

+0

只要在調試器中運行代碼,它就會工作。調試器對你的應用程序內存使用0初始化局部變量有一些魔力:http://www.flounder.com/debug_release.htm – user2378197

回答

7

「基本的C數據類型沒有默認的初始值」,並不意味着如果你不初始化它們,它們就沒有價值,只是你不會提前知道那個值是什麼。

在你的情況下,那number只是碰巧有一個零,但它可能有其他價值。

+0

所以基本上它有點隨機?我應該始終初始化,並不能指望它始終爲0?我在某個地方讀到它取決於特定時間在內存位置的內容。 – user3451821

+2

@ user3451821是和是。 –

4

局部變量分配在堆棧上。局部變量的初始值沒有保證值。相反,局部變量的值完全取決於前一個使用堆棧特定區域的函數留下的隨機值。

main函數的情況下,局部變量的初始值可能看起來是可預測的,因爲main是第一個運行和使用該堆棧區域的函數。但是,編譯器不費力,語言規範沒有要求,以保證局部變量的初始值。

總之,在使用它們之前,總是明確地初始化局部變量。