C++中二維數組傳參的方法詳解


C++中二維數組傳參的方法詳解
首先需要明確,C++中其實沒有多維數組,所謂的多維數組,其實就是數組的數組;
另外,數組中元素的個數也是數組類型的一部分。
當一個數組的元素仍然是數組時,通常使用2個維度來定義它,一個數組表示數組本身的大小,另一個維度表示其元素大小(它的元素也是數組):

int ia[3][4]; //大小為3的數組,每個元素是含有4個整數的數組
int (*p)[4] = ia;//p指向含有4個整數的數組(指向第一個內層數組)

1 將給定第二維長度的二維數組作為形參傳遞

#include<iostream>
using namespace std;

void outputArray1(int ia[][4])
{
    for (int i = 0; i != 3; ++i)
    {
        for (int j = 0; j != 4; ++j)
        {
            cout << ia[i][j] << endl;
        }
    }
}

int main()
{
    int ia[3][4] = {
    {1, 2, 8, 9 },
    {2, 4, 9, 12},
    {4, 7, 10, 13}
    };
    //輸出數組中所有元素
    outputArray1(ia);
    return 0;
}

2 使用給定第二維長度的指針作為形參傳遞

#include<iostream>
using namespace std;

void outputArray2(int (*pia)[4])
{
    for (int i = 0; i != 3; ++i)
    {
        for (int j = 0; j != 4; ++j)
        {
            cout << pia[i][j] << endl;
        }
    }
}

int main()
{
    int ia[3][4] = {
    {1, 2, 8, 9 },
    {2, 4, 9, 12},
    {4, 7, 10, 13}
    };
    //輸出數組中所有元素
    outputArray2(ia);
    return 0;
}

3 將二維數組指針轉換成一維數組指針作為形參傳遞

int (*ia)[4]轉換為 int* ia

#include<iostream>
using namespace std;

void outputArray3(int *pia2)
{
    for (int i = 0; i != 12; ++i)
    {        
        cout << pia2[i] << endl;
        //等價於cout<< *(pia2 + i) << endl;       
    }
   /* 另一種寫法
   for (int i = 0; i != 3; ++i)
    {
        for (int j = 0; j != 4; ++j)
        {         
            cout << *(pia2 + i * 4 + j) << endl;
            //等價於cout << pia2[ i * 4 + j] << endl;
        }
    }*/
}

int main()
{
    int ia[3][4] = {
    {1, 2, 8, 9 },
    {2, 4, 9, 12},
    {4, 7, 10, 13}
    };
    //輸出數組中所有元素
    outputArray3((int*)ia);
    return 0;
}

4 使用二級指針作為形參傳遞

#include<iostream>
using namespace std;

void outputArray4(int **pia3)
{

    for (int i = 0; i != 3; ++i)
    {
        for (int j = 0; j != 4; ++j)
        {
            cout << *((int*)pia3 + i * 4 + j) << endl;//解引用指針
        }
    }
}

int main()
{
    int ia[3][4] = {
    {1, 2, 8, 9 },
    {2, 4, 9, 12},
    {4, 7, 10, 13}
    };

    //輸出數組中所有元素
    outputArray4((int **)ia);//強制轉換為int**
    return 0;
}

Tips:對於2維數組ia來說,ia[1]指向第二行的第一個位置,*ia[1]等於2,一級指針指向每行(子數組)的第一個元素,用二級指針才能定位到任意單個元素。在實際使用中盡量避免使用強制轉換和多級指針。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM