今天我们来学习数组的另一种用高级用法,多维数组。多维数组的定义与使用与数学定义一致,它可以表示多维的数值。
一、二维数组
例如我们先来定义一个二维数组
int array[3][4] =
{
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
};
我们可以像上面例子一样在数组定义时为其指定初始值,也可以在数组定义之后再为其赋值。
上面例子中我们定义了一个具有3行的数组,而这个数组的每一行都具有4个元素,所以这个二维数组一共具有3x4=12个元素。在使用多维数组时,同样与一维数组一样采用中括号下标表示法如:
array[0][0] = 0;
array[0][1] = 0;
array[0][2] = 0;
array[0][3] = 0;
array[1][0] = 0;
array[1][1] = 0;
array[1][2] = 0;
array[1][3] = 0;
array[2][0] = 0;
array[2][1] = 0;
array[2][2] = 0;
array[2][3] = 0;
同样在中括号的下标不一定是数值,可以使用变量或表达式。例如我们通过一个双循环嵌套来显示这个二维数组:
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d\n", array[i][j]);
}
}
二、多维数组
多维数组的定义与使用与一维和二维数组一致,只不过多了一些维度而已。我们来定义一个三维数组
int array[2][3][4] =
{
{ {0,0,0,0},{0,0,0,0},{0,0,0,0} },
{ {0,0,0,0},{0,0,0,0},{0,0,0,0} },
};
这个三维数组共有2x3x4=24个元素。同样在使用多维数组时可以用中括号来取得其某个元素
array[1][2][3] = 345;
再来看看多维数组赋值与显示的例子
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 4; k++)
{
array[i][j][k] = i * 12 + j * 4 + k;
}
}
}
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 4; k++)
{
printf("%d ", array[i][j][k]);
}
}
}
三、存储方式
理论上讲我们可以定义任意维度的数组和任意大小的数组,但它们并不是像数学上或物理上所定义的多维度一样,在内存中,多维数组也是通过一维线性的方式存储在一块连续的内存中的。例如:
int array[2][3] =
{
{ 0, 1, 2 },
{ 3, 4, 5 }
};
这个二维数组在内存中是这样存储的:
也就是说我们虽然定义的是一个二维数组,但它实际在内存中仍然是一个连续的、线性的一维数组,只不过在使用时可以通过两个维度的下标来使用他们。同样多维数组也是这样的,我们来看一个三维数组array[2][3][2]在内存中存储的方式
其实多维数组的本质与一维数组没有什么区别,只不过在使用时可以通过多维下标的方式来使用其元素,这样就使我们可以通过更人性化的方式来使用它们。
Copyright © 2015-2023 问渠网 辽ICP备15013245号