[英]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”。
[0][6]
因为这是一个向量,并且第一个索引没有元素。 {'W','h','i','t','e','\\0'}
和{'B','l,'\\0'}
是像something[6]
一样的一维数组something[6]
或在第二种情况下为something[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.