2014-09-25 61 views
-1

我試圖修改一個多維數組。這是我的功能碼 -將多維數組傳遞給函數C

void rot90(int n,char **a) 
{ 
    int i,j; 
    int b[n][n]; 

    for(i=n-1;i>=0;i--) 
    { 
    for(j=0;j<n;j++) 
    { 
     a[n-1-i][j]=b[j][i]; 
    } 
    } 
    for(i=0;i<n;i++) 
    { 
    for(j=0;j<n;j++) 
    { 
     a[i][j]=b[i][j]; 
    } 
    } 
} 

而在我的主要功能,我叫它爲 - A是一個二維數組爲n×n。rot90(n,A);

其示出了上編譯以下錯誤 - 警告:傳遞的從兼容的指針類型「rot90」參數2 音符[默認啓用]:預期「字符**」,但參數是字符類型的」(*) [10]'

什麼是正確的做法? 謝謝。

+3

你能告訴我們'A'的定義嗎? – Coconop 2014-09-25 07:21:17

+1

我想這只是一個重現問題的例子,但仍然是:你在這裏使用'b'未初始化。至少'memset'它爲零,或者添加一個註釋,或者什麼,以避免關於UB的評論:-) – hyde 2014-09-25 07:26:33

+0

您正在傳遞指向該函數的指針,但期望指針指針 – 2014-09-25 07:29:15

回答

0

如果A是一個N X N數組,您使用的是VLA(它看起來像從你的代碼段),那麼原型必須要麼

void rot90(int n, char (*a)[n]) 

void rot90(int n, char a[][n]) 

void rot90(int n, char a[n][n]) 

第二兩種形式是INTE和第一個一樣喋喋不休; a是指向n-char的元素數組。