C:二维数组是如何工作的?

C:二维数组是如何工作的?,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,对于二维数组 char days[8][10] = { "", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; 阵列的模型如下所示: (来源:) 当在主功能中用作: printf("%s\n",days[1]); 产生星期一,同时: printf("%s\n",days[1][2]

对于二维数组

char days[8][10] = { "", "Monday", "Tuesday",
                         "Wednesday", "Thursday", "Friday",
                         "Saturday", "Sunday" };
阵列的模型如下所示:


(来源:)

当在主功能中用作:

printf("%s\n",days[1]);
产生
星期一
,同时:

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

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

一般来说,对于像

  char days[8][10]
days
是由8个元素组成的数组,每个元素是由10个
char
s组成的数组

换言之

  • days
    是二维数组
  • days[m]
    是每个一维数组
  • days[m][n]
    将是一维数组中的单个元素
现在,说到问题

main()
函数中使用时

好的,最好的猜测是在更新的代码中看到的,您使用它(
days[1]
)作为
%s
printf()
函数族中的参数

在这种情况下,
%s
需要指向以null结尾的字符数组的指针,而
天[1]
(衰减为)则需要指向数组的第一个元素的指针
“星期一”
。所以这是正确的

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

您尝试过

printf("%c\n", days[1][2]);
使用
%c
printf
函数指定要打印的字符

使用
%s
打印字符串。

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

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

代码用法

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

printf("%c\n", days[1][2]);//You are accessing the character in 2nd row (index 1) and 3rd column (index 2) here
要打印您应该写入的字符串

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)

days[1][2]
is
n
(a
char
)显示产生错误的代码。您在主函数中如何使用它?printf(“%s”,days[1][2])我现在明白我应该使用%c而不是%s。答案太棒了!正是我要找的。