在此之前,提一下二维数组的常用传递方法:
1.传递时提及第二维度:arr[][size2];
void func(int arr[]]){
arr]];
}
int main(){
int arr]];
func(arr);
}
2.“假装”成一维数组
void func(int* arr, int s1, int s2){
arr(s2 +); //相当于arr[3][4]=34,
}
int main(){
int arr]];
func( (int*)arr,,);
}
为什么要使用第二个维度,而不是第一个呢?
想一下,由两个维度摊开成一个面,从上到下从左到右数,第4行(行标是3)第5列(列标是4)是第几个元素怎么算?
应该是前3行每行6个元素,加上第四行的5个元素,即3*6+5=23(作为一位数组的下标是22)。
因此在这里,只需知道第二维度,而第一维度who care?
这也是方法一不需要第一维度的原因,两者其实是相同的原理。
三维数组:
与前面一样,懂了原理就知道,需要知晓后两个维度(n维数组需提供后面n-1个维度)
1. 按arr[][size2][size3]传递
2.还是“假装”成一维数组
void func(int* arr, int s1, int s2, int s3){
arr(s2*s3*3 + s3*4 + )=; //相当于arr[][][]=,
}
int main(){
int arr[][][];
func( (int*)arr, , , );
}
行和列形成一个面,多层面形成三维图形,维度顺序是层、行、列
前3层共有多少个元素,当然是6*7*3个了,所以需知晓第二、第三维度。
3.先在全局作用域设置一个类型别名
typedef int mytype[5][6][7];
然后就可以将mytype当成int[5][6][7]进行传递
void func(mytype arr){
arr[][][]=;
}
void main(){
mytype arr; //相当于int arr[5][6][7]
func(arr);
}
这,好像就是看起来简约了一点,但其实,emmm,作用确实不大,只是便于封装。。。
只要理解了原理,妈妈再也不用担心我传数组啦!不管几维数组都能传。