C语言中二维数组声明时,探究省略第一维的原因
我们在使用二维数组作为参数时,我们既可以指明这个数组各个维度的维数,同时我们也可以省略一维,但是二维却不能省略。why呢?由于编译器原理的限制,在一个数组Elemtype test[m][n]中,访问test[i][j]时(也就是寻找绝对地址了),loc(i,j)=loc(0,0)+i * n * sizeof(Elemtype)+j * sizeof(Elemtype)
注:Elemtype是存储的元素类型,这样我们就看到二维长度起到了作用。
通俗来讲:二维数组就是若干个一维数组,而参数中的第二维就是二维数组中作为元素的一维数组的长度。
从这个图,我们可以清晰看出,在计算地址时, “列”值起到的作用。
在定义二维数组的时候对其进行初始化,也可以省略第一维,编译器会根据你的初始化语句自动决定第一维度。
这里给出以二维数组为参数,矩阵的乘法的例子。
/**
A:待乘矩阵
B:待乘矩阵
C:结果矩阵
m:左矩阵行
n:左矩阵列也是右矩阵行
k:右矩阵列
**/
void mul(int C[][Maxsize],int A[][Maxsize],int B[][Maxsize],int m.int n,int k){
for(int i=0;i<m;i++){
for(int j=0;j<k;j++){
C[i][j] = 0;
for(int h=0;h<n;h++){
C[i][j]+=A[i][h]*B[h,i];
}
}
}
}