天天看點

如何傳遞三維數組乃至n維數組

在此之前,提一下二維數組的常用傳遞方法:

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,作用确實不大,隻是便于封裝。。。

隻要了解了原理,媽媽再也不用擔心我傳數組啦!不管幾維數組都能傳。

繼續閱讀