2010-07-25 65 views
0

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

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

回答

0
  1. 你不能initalize阵列[0][6] beucase这是一个矢量,并且第一 指数不必须的元素。
  2. 而你不能将1D(矢量)数组 赋值给2D数组。 {'W','h','i','t','e','\0'}{'B','l,'\0'}是一个一维阵列像 something[6]或在第二种情况下 something[3]
  3. 而且你有三重声明 codes变量。你只能有一个 声明变量。
5

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

你正在同时完成这两项任务,这让你感到困惑。在你的第一个语句中,你告诉编译器:“代码是一个二维的1x6数组。顺便说一下,这里有一些值:”白色“。”你的第二个问题是,“代码是一个2维,2×6的阵列。顺便说一句,把”BI“放进去。”

编译器抱怨并说:“它不能是2x6阵列,因为你已经告诉我这是一个1x6阵列。”

你需要的是这样的:

炭代码[2] [6] = {{ 'W', 'H', 'I', 'T', 'E','\ 0 '},{'B','l,'\ 0'}};

你会再通过看代码得到你的“W” [0] [0]等

0

代替代码[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'}}; 
0

你让初始化与赋值混淆。当你把它声明,在

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]),而不是loc因此编译器错误。