0

我正在尝试使用常规 c 在我的目标 c 项目中创建一个二维数组,但它无法正常工作。

首先,我在我的 ViewController.h 接口文件中声明它......

int selectedItemsInt;

那是我计划使用的二维。接下来我在我的 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}};

这是一个巨大的二维数组,我从中得到两个错误......

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

您需要声明selectredItemsInt为二维数组:

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 回答