繁体   English   中英

2D数组中的类型冲突(C)

[英]Conflicting types in a 2D array (C)

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

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]);

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

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

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

您需要的是这样的:

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

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

  1. 您不能初始化数组[0][6]因为这是一个向量,并且第一个索引没有元素。
  2. 您不能将1D(矢量)数组分配给2D数组。 {'W','h','i','t','e','\\0'}{'B','l,'\\0'}是像something[6]一样的一维数组something[6]或在第二种情况下为something[3]
  3. 并且您具有codes变量的三元声明。 您只能声明一个变量。

如果您希望编译器根据您的初始化决定数组的大小,则可以使用以下代码代替code [0] [6]:

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

如果您要初始化2D数组:

尝试:

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

要么

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

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

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]的使用解释为数组大小,而不是位置),因此编译器错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM