在内存中有下边一段数据:
如果它被定义为一个 5 行 4 列的二维数组(a[5][4]),那么请问 a[3][3] 的值是多少?
答:从概念模型来看,这个二维数组应该是下边这样。
So,a[3][3] 的值就是 4 行 4 列的值啦(从 0 开始数,还记得吗?)。
请问下边代码是初始化一个几行几列的二维数组?
int a[][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
答:是一个 3 行 4 列的二维数组。由于我们这里只初始化了 10 个元素,并指定了该数组有 4 列,a[2][4] 是不够放了,只能用 a[3][4] 来存放,剩余的空间初始化为 0。
假设有一个五维数组,如果要遍历其中的每一个元素,应该使用几层循环嵌套合适?
答:五层,每一层一个维数,简单好记。
下边用二维数组来存放 5 句口号,请问需要使用几层循环嵌套将它们打印出来?
答:一层(不用嵌套),请看下边代码。
#include <stdio.h>
#define NUM 5
int main()
{
char slogans[NUM][100] = {
"I love FishC.com!",
"Keep moving!",
"Impossible is nothing!",
"Just do it!",
"I am what I am!"};
int i;
for (i = 0; i < NUM; i++)
{
printf("%s\n", slogans[i]);
}
return 0;
}
问:那为啥上边的空白这么一大块?
答:哇哈哈哈,这特么的都是套路呐!
如何获取二维数组 a 的长度?答:sizeof(a) / sizeof(a[0][0]),这是最好的方法,没有之一。
请问二维数组 a[4][5] 是 4 行 5 列还是 5 行 4 列呢?答:其实两种答案都是正确的。因为几行几列实际上只是我们为了方便大家理解和想象而构造出来的概念模型。实际上在内存中,它的存储方式仍然一维数组的线性方式扩展开而已。但无论你的程序采用哪一种解释方法,都请坚持使用同一种方法。