2

.hファイルにこれがある場合:

int index;

そして、.m私が持っているファイルで:

if (index == nil)

に値を割り当てていませんがindex、それは当てはまりますか?

編集
nil はオブジェクトにのみ使用されると思います。では、値が割り当てられていない int の状態はどのようなものでしょうか?

4

4 に答える 4

4

int に「nil」というものはありません。それはオブジェクト値です。デフォルトで初期化される変数については、次のとおりです。

  • 非静的ローカル変数は、定義された値に初期化されません (実際には、通常、占有しているメモリに以前にあったビット パターンは何でもあります)。
  • 静的変数は 0 に初期化されます
  • グローバル変数は 0 に初期化されます
  • インスタンス変数は 0 に初期化されます

上記の最初のルールは、ローカル オブジェクト変数にも適用されることに注意してください。それらは nil で初期化されません。(ただし、オブジェクト型を持つインスタンス変数はそうなります。)

于 2010-06-25T01:29:38.313 に答える
1

変数は、値を割り当てる前は技術的に未定義です (任意の値を持つ可能性があります)。ほとんどの場合、それはゼロに等しくなります。また、nil と NULL の両方がゼロに定義されます。ただし、この比較はお勧めしません。ポインターを比較する場合にのみ nil を使用する必要があります (プリミティブで使用することは意図されていません)。

于 2010-06-25T01:18:04.433 に答える
1

まだ割り当てられていない整数の値は、その宣言によって異なりintます。他に何も割り当てていない場合、静的ストレージ期間を持つ はゼロです。自動または割り当てられたintストレージ期間を持つ は、明示的に初期化しない場合、任意の値を持つ可能性があります。

ところで、そのようにヘッダーにオブジェクト宣言を入れると、後で苦労することになります。

于 2010-06-25T01:33:54.420 に答える
0

nil は、Objective-C オブジェクト ポインター用に予約されている特定の値です。これは NULL (0) に非常に似ていますが、メッセージ パッシングで使用すると意味が異なります。

int のようなローカル プリミティブ データ型は、Objective-C では初期化されません。index の値は、書き込むまで定義されません。

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

//initialise static variable
static int var = 6; 
于 2010-06-25T01:18:05.457 に答える