2014-02-23 56 views
1
void print_matrix(double ** m, int rows, int cols) 
{ 
    for(int i = 0; i < rows; ++i) 
    { 
    for(int j = 0; j < cols; ++j) 
    { 
     cout << m[i][j] << '\t'; 
    } 
    cout << endl; 
    } 
} 

int main() 
{ 
    double m[4][5] = 
    { 
    {2, 3, 4, 5, 6}, 
    {1, 0, 0, 6, 0}, 
    {0, 0, 2, 9, -6}, 
    {9, 8, 7, 6, 5}, 
    }; 
    print_matrix(m, 4, 5); 
    return 0; 
} 

main.cpp:30:25: error: cannot convert 'double (*)[5]' to 'double**' for argument '1' to 'void print_matrix(double**, int, int)' 
    print_matrix(m, 4, 5); 
         ^

所以我想我明白這裏有什麼問題,但我想知道你將如何處理這個問題。我需要使用動態內存嗎?C++中傳遞多維數組

回答

0

是的,你必須使用的,而不是靜態聲明動態內存。

一個數組數組不會轉換爲指向指針的指針。

問候

PD:我以爲你不希望使用一個固定大小的數組中的函數原型

1

正確的原型是:

void print_matrix(double (&m)[4][5]); 
const

甚至更​​好:

void print_matrix(const double (&m)[4][5]); 

現場演示:https://ideone.com/ycFZSt

+0

他是否有指定第一個維度的長度是多少? –

+0

@ Mhd.Tahawi:'double(* m)[5]'是另一種選擇。 – Jarod42