簡體   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