1

次のように定義されたObjectiveCのC配列があります。

id keysArray;

次に、ifブロックで、条件に基づいて配列を再定義したいと思います。

if (somethingIsTrue){
    id keysArray[4][3];
}
else {
    id keysArray[6][1];
}

次に、ifブロックの外側で、配列にアクセスすると、keysArrayが存在しないというエラーが表示されます。

ありがとう。

4

2 に答える 2

2

これは、ifのスコープを離れると、そのスコープ内で定義されているすべてのローカル変数が破棄されるためです。これを行う場合は、動的割り当てを使用する必要があります。Objective Cのやり方はわかりませんが、通常のCではmallocを使用します。

于 2010-09-17T10:45:11.473 に答える
1

ではC、一度作成した配列はサイズを変更できません。malloc()そのためには、ポインターと友達が必要です。

C99可変長配列」( VLA ) と呼ばれる新しい機能があり、実行時に定義された長さの配列を使用できます (ただし、オブジェクトの期間中は固定されます)。

while (1) {
    /* C99 only */
    int rows = 1 + rand() % 10; /* 1 to 10 */
    int cols = 1 + rand() % 10; /* 1 to 10 */
    {
       int array[rows][cols];
       /* use array, different sizes every time through the loop */
    }
}
于 2010-09-17T10:49:33.130 に答える