【问题标题】:Conflicting types in a 2D array (C)二维数组中的冲突类型 (C)
【发布时间】:2010-07-25 21:26:09
【问题描述】:

我正在编写我的第一个 C 程序,它使用了一个二维数组,而且代码对我来说似乎很奇怪。首先,为什么我必须在 [1][6] 中存储“White”?我试过 [0][6],但是编译器抱怨并且不会运行,但是当我在 printf 中调用它时,它是 [0][6]。此外,当尝试在代码 [2][6] 中存储“Bl”时,它会显示代码的类型冲突。任何帮助将不胜感激,谢谢。

int main (int argc, const char * argv[]) {

 for (q=0; q<=457; q++) {
  for (w=0; w<=6; w++) {
   codes[q][w] = 0;
  }
 }

 char codes[1][6] = {'W','h','i','t','e','\0'};
 char codes[2][6] = {'B','l,'\0'};

 printf("%c\n", codes[0][0]);

【问题讨论】:

    标签: c multidimensional-array


    【解决方案1】:

    您混淆了需要执行的两项任务。一项任务是声明一个变量,并告诉编译器它将保存什么类型。第二个任务是往里面放数据。

    您同时执行两项任务,这让您感到困惑。在您的第一个语句中,您告诉编译器,“代码是一个 2 维 1x6 数组。顺便说一下,这是要放入其中的值:“白色”。您的第二个陈述说:“代码是一个二维的 2x6 数组。顺便说一下,将“BI”放入其中。”

    编译器抱怨说:“它不可能是 2x6 数组,因为你已经告诉我它是 1x6 数组了。”

    你需要的是这样的:

    字符代码[2][6] = { {'W','h','i','t','e','\0'}, {'B','l,'\ 0'} };

    然后您可以通过查看代码[0][0] 等来获得您的“W”。

    【讨论】:

      【解决方案2】:
      1. 你不能初始化数组[0][6] 因为这是一个向量,首先 索引没有元素。
      2. 你不能一维(向量)数组 分配给二维数组。 {'W','h','i','t','e','\0'}{'B','l,'\0'} 是一维数组,例如 something[6] 或第二种情况 something[3]
      3. 你有三重声明 codes 变量。你只能一个 声明变量。

      【讨论】:

        【解决方案3】:

        如果你想让编译器根据你的初始化来决定数组的大小,而不是代码[0][6],你可以说:

        char codes[][6] = {'W','h','i','t','e','\0'};
        

        如果您尝试初始化二维数组:

        试试:

        char codes[2][6] = {{'W','h','i','t','e'}, {'B','l'}};
        

        或者

        char codes[][6] = {{'W','h','i','t','e'}, {'B','l'}};
        

        【讨论】:

          【解决方案4】:

          您将初始化与赋值混淆了。您可以在声明数组时对其进行初始化,如

          char codes[N][6] = { // where N is the total number of codes
            "White", // assigns codes[0][0] - codes[0][5] as 'W','h','i','t','e',\0
            "Bl",    // assigns codes[1][0] - codes[1][2] as 'B','l',\0
            ...
          }; 
          

          相当于写

          char codes[N][6] = {
            {'W','h','i','t','e',\0},
            {'B','l',\0},
            ...
          };
          

          或者您可以在声明之后分配数组的元素,如

          char codes[N][6];
          ...
          strcpy(codes[0], "White"); 
          strcpy(codes[1], "Bl");
          ...
          

          您所做的是将两者混合在一起,因此您使用不同类型重新声明 codes(编译器将您对 [0][6] 和 [1][6] 的使用解释为数组大小,不是位置),因此编译器错误。

          【讨论】:

            猜你喜欢
            • 2019-12-11
            • 2021-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多