在此之前,提一下二維數組的常用傳遞方法:
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,作用确實不大,隻是便于封裝。。。
隻要了解了原理,媽媽再也不用擔心我傳數組啦!不管幾維數組都能傳。