0

通常のcを使用してObjectiveCプロジェクトで2次元配列を作成しようとしていますが、正しく機能していません。

まず、ViewController.hインターフェイスファイルでこれを宣言します...

int selectedItemsInt;

それが私が使用する予定の2次元です。次に、onloadメソッドで配列を作成します...

selectedItemsInt [36] [11] = {{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}};

これは巨大な2次元配列であり、2つのエラーが発生します...

Expected expression &AND& Subscripted value is not an array, pointer, or vector

配列の前にintを配置しますが、コードのさらに下の配列にアクセスして編集したいと思います...

int index = selectedItemsInt [y][row]; //y and row are ints

そのコードでも同じエラーが発生します...

Subscripted value is not an array, pointer, or vector

どんな助けでも大歓迎です!

4

3 に答える 3

3

selectredItemsInt2次元配列として宣言する必要があります。

int selectedItemsInt [36] [11];

次に、onloadで動的に入力します(宣言時の値がわからない場合)。

for (int i=0; i<36; ++i) {
  for (int j=0; j<11; ++j) {
    selectedItemsInt[i][j] = ...;
  }
}

宣言時の値がわかっている場合は、配列を一度に宣言して初期化できます。

int selectedItemsInt [36] [11] = {{1,1,1,1,1,1,1,1,1,1,1}, ...};

ここでの最初の次元は冗長である可能性があることに注意してください。正しい数の初期化値を指定すると、次のことができます。

int selectedItemsInt [] [11] = {{1,1,1,1,1,1,1,1,1,1,1}, ...};

次元と値の両方を指定したが、リストされた値の数が宣言された次元より少ない場合、配列の終わりは初期化されません。

于 2012-05-01T11:33:29.970 に答える
0

最初にintとして宣言するだけでなく、このコンテンツで初期化する必要があります。

int selectedItemsInt [36] [11] = {{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1}};

として宣言selectedItemsIntint、配列を初期化しようと思ったときに、実際にintに添え字を付けようとしました(もちろん許可されていません)。

于 2012-05-01T11:32:23.520 に答える
0

Objective-CはCの厳密なスーパーセットです。Cで機能するものはObjective-Cでも機能します。

変数を単一のintとして宣言していますが、後でその内容を設定しています。コンテンツをすぐに設定して、intの固定サイズの配列として宣言するか、intへのポインターとして宣言します(配列として使用できます)。int *selectedItemsInt;

于 2012-05-01T11:33:58.923 に答える