在函數中傳入二維陣列

因為昨天Euro問了我有關於把二維Array當成參數的問題,

所以今個兒我就做了個小小的測試,來看看pointer和array在實際應用上的差異:

#include

void func1( int **num         )             {}
void func2( int (*num)  []     )            {}
void func3( int *num    []     )             {}
void func4( int *num    [2]   )             {}
void func5( int (*num)  [2]   )             {}
void func6( int  num    [][2] )              {}
//void func7( int num[ ][ ] )                {}          // illegal

int main()
{
    int numA[2][2];                                                // numA is a 2x2 Array
    int *numA0 = numA[0], *numA1 = numA[1];
    int *numAA[2] = {numA0, numA1};

    // numA typeis int(*)[2]

    // func1(numA);                                                // expect int **
    func2(numA);
    //  func3(numA);                                               // expect int **
    //  func4(numA);                                               // expect int **
    func5(numA);
    func6(numA);

    // numAA type is int**
    func1(numAA);
    // func2(numAA);                                              // expect int(*)[]
    func3(numAA);
    func4(numAA);
    //  func5(numAA);                                             // expect int(*)[2]
    //  func6(numAA);                                             // expect int(*)[2]

    return 0;
}

結論是,Array[x][y]和 **Array的呼叫是有差異的!!! (好像是廢話)
不過我還是習慣直接傳Array第一個element的位址,然後function參數用int *num來接收
哈哈就看怎樣用得順囉~

本篇發表於 C_And_Cpp。將永久鏈結加入書籤。

發表留言