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]
isn
(achar
)显示产生错误的代码。您在主函数中如何使用它?printf(“%s”,days[1][2])我现在明白我应该使用%c而不是%s。答案太棒了!正是我要找的。