C:二维数组如何工作?

时间:2017-02-02 05:20:22

标签: c arrays multidimensional-array

对于二维数组,

char days[8][10] = { "", "Monday", "Tuesday",
                         "Wednesday", "Thursday", "Friday",
                         "Saturday", "Sunday" };

数组的模型在这里:

image http://songjinshan.com/akabook/_images/array.multichar.png

在主函数中使用时:

printf("%s\n",days[1]);

生成Monday,而:

printf("%s\n",days[1][2]);

产生错误。我真的不明白它是如何运作的。

3 个答案:

答案 0 :(得分:6)

一般来说,对于像

这样的数组
  char days[8][10]

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

以其他方式,

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

现在,提出问题,

  

用于main()功能...

嗯,最好的猜测是,如更新后的代码中所示,您使用它(days[1])作为%s家族中printf()的参数功能。

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

另一方面,对于%s格式说明符,days[1][2]是一个不匹配的参数,因为它会针对预期的char生成char *。要打印days[1][2],您需要使用%c格式说明符。

答案 1 :(得分:5)

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

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

enter image description here

代码使用

现在,如果你想打印字符,你应该写一些像

这样的东西
printf("%c\n", days[1][2]);//You are accessing the character here

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

printf("%s\n", days[1]);//You are accessing the array of characters (string) here

答案 2 :(得分:1)

你试过吗,

printf("%c\n", days[1][2]);

使用%c指定要打印字符的printf函数。

使用%s打印字符串。