对于二维数组,
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]);
产生错误。我真的不明白它是如何运作的。
答案 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中的数组是基于零的索引)。
让我在这里编辑你的图像来解释这个概念。
代码使用
现在,如果你想打印字符,你应该写一些像
这样的东西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
打印字符串。