我在嘗試製作c中的tic tac toe遊戲時感到困惑。我正在關注一本使用8個元素的單個char數組來創建電路板的書。我知道數組[8]包含9個元素,但是如果數組被聲明爲char數組,那麼它必須包含空格來爲遊戲創建空白板,不應該是數組[9],因爲它必須包含9個字符加上空字符'\ 0'?我將這個板轉換成二維數組時有同樣的疑問,因爲我知道該板應該用一個數組[3] [3]製成,但是如果我想將它聲明爲char,那麼它的位置在哪裏空字符?在c - tic tac toe遊戲中初始化2d char數組
回答
如果使用字符數組來存儲字符串,則需要終止零。
在任務的情況下,不需要在數組中存儲字符串。
所以用C你可以聲明例如3×3陣列的以下方式
該數組的每個元素將不包含終止零儘管它是由一個字符串初始化。
另一方面,如果您認爲輸出這樣的數組會更簡單,那麼您可以在每個元素中包含終止零。在這種情況下,陣列應該像
char board[3][4] =
// ^^^
{
" ", // three spaces
" ",
" "
};
至於你語句
陣列[8]包含9個元素
則數組被聲明爲具有正好8被定義元素。 :) 我認爲你的意思是字符串文字。例如,C中的字符串文字爲"Hi"
的文件類型爲char[3]
,因爲存儲在文字中的終止零。
二維數組本質上是一維數組,增加了編程人員的易用性。您所讀的書可能只是將這些值存儲在單元格中,並將它們顯示爲字符串,而不是像字符串一樣,就像您所說的那樣。這比將整個電路板作爲字符串存儲更有效率。
假設您想要存儲4x4區域的二維數組。你可以把它表示大小爲16的一維數組,並獲得indicies像這樣:
arr[j + i * 4]
,其中的J,你是在4單元塊,而我就是4單元塊你在
此外,大小[8]的數組有8個元素。例如:
char arr[8]; // has 8 elements, not 9
我知道一個數組[8]包含9個元素
沒有,爲什麼它應該是什麼?定義爲int arry[8]
的數組僅包含8個元素。那也是,在C中,數組索引是基於0的,意思是,對於上面的一個數組,只有array[0]
到array[7]
纔是有效訪問。
也就是說,對於一個char
數組,要用作字符串,應該也有空終止符的空間。因此,如果您想要有一個由9個元素組成的char
數組,並且想將其用作字符串,則需要將其定義爲char[10]
。
使用字符作爲數組的值與char
的數組可能衰減爲指針char*
並被解釋爲終止字符串的事實無關。
字符串在C中沒有特定的類型,它只是一種解釋某些數據的方法。所以你在混合兩個概念。
A char
數組並非必須是NUL
已終止,它需要NUL
終止,如果要將它用於將函數用作字符串的函數。
擁有char board[3][3]
是完全合法的,並且有9個字符元素的空間,因爲您不打算將該數據用作字符串,所以它不需要\0
。
一個字符數組可以在任何位置保存任何值。只有當你想要使用某些功能時,你需要確保在字符串末尾有一個NUL字符(這是一個0
,而不是'0'
!),它告訴函數何時停止處理!
所以:char john[4] = { 'J', 'o', 'h', 'n' };
是完全合法的 - 只要不傳遞到john
strlen()
,因爲它會繼續計數,直到它找到一個0
值,並且沒有任何陣列中!
另外:char tictactoe[3][3];
不需要0
任何地方 - 除非你試圖將整個陣列傳遞給printf()
出於某種原因...
請注意,您可以放心地執行以下操作:
printf(" %c | %c | %c \n", tictactoe[0][0], tictactoe[0][1], tictactoe[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n", tictactoe[1][0], tictactoe[1][1], tictactoe[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n", tictactoe[2][0], tictactoe[2][1], tictactoe[2][2]);
因爲使用%c
表示「打印一個字符」,而不是「打印字符串」。
以NUL結尾的字符串形式通常被稱爲ASCIIZ(ASCII-Zeroed)字符串,並且是9個字符數組只能容納8個字符的字符串的原因(與您相反說) - 它需要第九持有NUL。
並一如既往C任何陣列從0到length-1的,因此[0]
,[1]
和[2]
在我的例子
- 1. C++ Tic Tac Toe遊戲
- 2. Tic Tac Toe遊戲
- 3. Java eclipse tic tac toe遊戲
- 4. Replay tic tac toe遊戲
- 5. tic tac toe遊戲java
- 6. 角的tic tac toe遊戲
- 7. Tic Tac Toe遊戲JavaScript
- 8. Tic Tac Toe遊戲錯誤
- 9. Libgdx tic tac toe遊戲
- 10. Tic Tac Toe遊戲winforms
- 11. Flex中的Tic Tac Toe遊戲
- 12. Android 4 * 4 tic tac toe遊戲
- 13. SOS遊戲:Tic-Tac-Toe的概念
- 14. 檢查python上的tic tac toe遊戲
- 15. Tic Tac Toe遊戲僞代碼
- 16. 蟒蛇的tic tac toe遊戲
- 17. Tic Tac Toe遊戲狀態不更新
- 18. C++ Tic Tac Toe AI
- 19. Tic-tac-toe編
- 20. Replay Tic Tac Toe
- 21. Tic Tac Toe Score
- 22. Tic Tac Toe array
- 23. C++ Tic Tac Toe項目
- 24. tic-tac-toe while and ||
- 25. Tic Tac Toe WinCheck Def
- 26. 在Visual Basic 2005中修復我的Tic Tac Toe遊戲
- 27. Tic-Tac-Toe遊戲在字段列表中的未知列'i'MySQL
- 28. 在R中使用GUI創建Tic Tac Toe遊戲
- 29. 在tic tac toe遊戲中,minimax算作ai功能嗎?
- 30. Tic tac toe遊戲類型錯誤無python
如果你知道字符串和字符數組的區別,你會想通了。 – wrangler
8個字符的數組將包含8個字符。當你指的是一個c風格的字符串,比如char * str =「hello」,那當你需要擔心爲那個額外的'\ 0' – StaticBeagle
留下空間時「我知道一個數組[8]包含9個元素」。不,它包含8個元素。是什麼讓你相信嗎? –