多维数组是由多个一维数组构成的,一般所用都的多维数组为二维数组,二维数组常称为矩阵,把为为数组写成行和列的排列形式,可以形象化的理解二位数组的逻辑结构,如下为定义一个二维数组及给其中的位置赋值
int arr[3][4];
arr[0][2]=64;
arr[1][3];
这是定义二维数组最直接的方法,但也有缺点:只能对个别位置进行赋值。而未赋值的位置的数是异常的,因此这种方式只用来对数组中的值进行修改,所以有另一种的赋值方式
int arr[2][3]={0,1,2,3}
这是最常用的数组赋值方式,在未赋值的位置的值默认为0,不存在数据异常的情况 需要注意的是多维数组是有多个一维数组嵌套而成,所以几维数组就用几个[][]来表示,不能在一个[]中写多个数组,如[2,3],这种表示是错位的 数组的内存存放是连续的,实际上存放在一行上,且是按行存放,第二行接在第一行的后面进行存放,所以如果使用指针的方法来遍历多维数组,只需在后面++就可以实现多维数组的遍历,普通的遍历方式如下
int arr[3][4]={1,2,3};
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
printf("%d ",arr[i][j]);
}printf("\n");
}
二位数组的表示可以简化,如arr[3][4]可以简化为arr[][4],只可以不写行,列一定要写,不然电脑无法得知一行有多少个元素 二位数组中有一道经典的例题就是杨辉三角,其过程如下
#include <stdio.h>
int main() {
int yh[20][20];
yh[0][0] = 1;
int i;
int j;
for (int i = 0; i < 20; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
yh[i][j] = 1;
}
else {
yh[i][j] = yh[i - 1][j] + yh[i - 1][j - 1];
}
}
}
for (i = 0; i < 20; i++) {
for (j = 0; j <= i; j++) {
printf("%d ", yh[i][j]);
}printf("\n");
}
return 0;
}