2010-06-25 82 views

回答

1

該變量在技術上未定義(可能有任何值),然後再爲其分配一個值。最有可能的是,它將等於零。此外,nil和NULL都被定義爲零。但是,不建議這種比較。比較指針時,您只應該使用nil(它不打算與基元一起使用)。

+0

最有可能*,但並不總是。* @Kevin有它的權利,你應該總是初始化變量。 但是,作爲對象的ivars的'int'在調用'[obj init]時被初始化爲0;' – 2010-06-25 16:55:26

0

nil是爲Objective-C對象指針保留的特定值。它與NULL(0)非常相似,但在與消息傳遞一起使用時具有不同的語義。

像int這樣的局部原始數據類型不在Objective-C中初始化。索引的值在寫入之前不會被定義。

void foo() { 
    //initialize local variable 
    int x = 5; 
} 

//initialise static variable 
static int var = 6; 
+1

如果它們具有靜態存儲持續時間,則它們被初始化爲0,對嗎? – 2010-06-25 01:21:45

+0

我不認爲在C/Objective-C中初始化了任何基本類型,您應該自己初始化原始變量。 – Akusete 2010-06-25 01:23:47

+3

具有靜態存儲持續時間的變量在C中是絕對零初始化的(C99§6.7.8.10)。 – 2010-06-25 01:25:42

4

對於整數,沒有「nil」這樣的事情。這是一個對象值。

  • 非靜態局部變量不會被初始化到任何定義值(在實踐中,他們通常會擁有的任何位模式以前在他們佔用的內存)
  • :至於哪些變量默認初始化
  • 靜態變量初始化被初始化爲0
  • 實例變量0
  • 全局變量初始化爲0

注意,第一個規則上面也適用到局部對象變量。他們不會爲你初始化。 (雖然有對象類型的實例變量)

1

尚未分配的整數的值取決於其聲明 - 如果您沒有爲其分配任何其他值,則帶有靜態存儲持續時間的int爲零。具有自動或分配存儲持續時間的int可以具有任何值,如果您沒有明確地初始化它。

順便說一句,把對象聲明放在你的頭文件中會讓你後來感到痛苦。