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)
产生错误.我真的不明白它是如何工作的.
一般来说,对于像这样的数组
char days[8][10]
Run Code Online (Sandbox Code Playgroud)
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格式说明符.
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)