簡體   English   中英

將標准數組和動態數組傳遞給C ++中的函數

[英]Passing standard and dynamic arrays to functions in c++

我正在學習cpp,這與我正在處理的作業有切線關系。 我對編寫接受動態多維數組的函數感到困惑。 例如,如果我有兩個一維數組,一個是動態數組,另一個沒有,則可以將它們中的任何一個傳遞給以下函數並使它們都起作用:

// Regular 1D array
int b[] = {1,2,3};

// Dynamic 1D array
int *p_b;
p_b = new int[3];
for(int i=0;i<3;i++)
{
    p_b[i] = i;
}

//Function prototype. Works when I use printGrid(b) and printGrid(p_b)
void printGrid(int *a);

但是,如果我在使用2D數組時遇到以下情況,那么只有在傳遞動態數組時它才會編譯:

// Regular 2D array
int c[3][3] ={{1,2,3},{4,5,6,},{7,8,9}};

// Dynaimc 2D array
int **p_c;
p_c = new int*[3];
for(int i=0; i<3;i++)
{
    p_c[i] = new int[3];
}
for(int i=0; i<3; i++)
{
    for(int j=0;j<3;j++)
    {
        p_c[i][j] = i+j;
    }
}

// Function prototype - Compiles and works using printGrid2(p_c) but fails to compile     using printGrid2(c)
void printGrid2(int **a);

printGrid函數下面的代碼完全相同,因此擁有兩個函數似乎很浪費,一個函數使用a [] []作為參數,另一個函數使用int ** a。 我不是不理解或缺少什么嗎? 提前致謝!

這並不罕見,您可以做的是將printGrid2轉發到printGrid以利用該功能(避免重復代碼和維護開銷)。

printGrid2在第一個維度上循環並使用a [0] .. a [n]之類的函數調用printGrid。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM