C:二维数组如何工作?

Der*_*Zsy 3 c arrays multidimensional-array

对于二维数组,

char days[8][10] = { "", "Monday", "Tuesday",
                         "Wednesday", "Thursday", "Friday",
                         "Saturday", "Sunday" };
Run Code Online (Sandbox Code Playgroud)

数组的模型在这里:

图片http://songjinshan.com/akabook/_images/array.multichar.png

在主函数中使用时:

printf("%s\n",days[1]);
Run Code Online (Sandbox Code Playgroud)

生产Monday,同时:

printf("%s\n",days[1][2]);
Run Code Online (Sandbox Code Playgroud)

产生错误.我真的不明白它是如何工作的.

Sou*_*osh 7

一般来说,对于像这样的数组

  char days[8][10]
Run Code Online (Sandbox Code Playgroud)

days是一个包含8个元素的数组,每个元素都是10 char秒的数组.

换句话说,

  • days 是二维数组,
  • days[m] 是一维数组中的每一个
  • days[m][n] 将是一维数组内的单个元素.

现在,提出问题,

main()功能中使用...

好, 最好的猜测是在更新的代码所示,你使用它(days[1])作为参数,以%sprintf()家庭的功能.

在这种情况下,%s需要一个指向以null结尾的char数组的days[1]指针,并指向(衰减)指向数组第一个元素的指针"Monday".这是正确的.

另一方面,对于%s格式说明符,days[1][2]是一个不匹配的参数,因为它产生了一个char与预期的对应char *.要进行打印days[1][2],您需要使用%c格式说明符.

  • 真棒的答案!正是我在寻找什么. (2认同)

A.B*_*.B. 6

C/C++/Java/C#中的数组是基于零的索引,这里你创建了二维数组或字符表,当你写第一行时你正在访问第一行,这是一个名为String的 1D(维)字符数组,当你写日[1] [2]你正在访问第2行和第3列的字符(记住C中的数组是基于零的索引).

让我在这里编辑你的图像来解释这个概念.

在此输入图像描述

代码用法

现在,如果你想打印角色,你应该写一些像,

printf("%c\n", days[1][2]);//You are accessing the character in 2nd row (index 1) and 3rd column (index 2) here
Run Code Online (Sandbox Code Playgroud)

要打印你应该写的字符串,

printf("%s\n", days[1]);//You are accessing the 2nd string (array of characters) OR 2nd row in 2D array which is at index 1 (remember '0' based index)
Run Code Online (Sandbox Code Playgroud)