2012-12-02 30 views
2

無效類型「INT [INT]」我想通過動態分級的2D陣列作爲一個參數的函數。我知道這個問題在許多地方已經被多次討論過了,但是即使在應用了所有的[]和*的排列組合之後,我一直無法得到這個結果。錯誤:數組下標

#include<iostream> 
#include<algorithm> 
using namespace std; 

int bestpath(int *A, int N, int x, int y) 
{ if(x>= N || y>=N) 
     return 0; 
    if(x == y == N-1) 
     return 0; 
    int value= A[x][y]; // Error: Invalid type 'int[int]' for array subscript. 
    value+= max(bestpath(A, x+1, y, N), bestpath(A, x, y+1, N)); 
    return value; 
} 

int main() 
{ int T, N, i, j, k; 
    cin>>T; 
    for(i=0; i<T; i++) 
    { cin>>N; 
     int A[N][N]; 
     for(j=0; j<N; j++) 
     { for(k=0; k<N; k++) 
      { cin>>A[j][k]; 
      } 
     } 

     int ans= bestpath(&A[N][N], N, 0, 0); 
     cout<<ans<<endl; 
    } 
    return 0; 
} 

錯誤發生在指示的行中。

如果我改變函數定義TO-

int bestpath(int *A[], int N, int x, int y) 

的錯誤出現在函數調用:不能轉換INT *爲int **。 我想我基本明確使用* A * A [],** A,以及我們通過矩陣任何其他方式。 還有沒有其他更好的方法來做到這一點?

+0

'A [N] [N]'是'int'(您訪問元素)。該地址是一個'int *'。 – chris

+1

'int A [N] [N];'使用GCC擴展的變長數組。 –

+0

除了什麼@sftrabbit說,即使你可能是最好(用'A'聲明的數組,其尺寸在運行時指定,'&A [N] [N]''如的INT A [N] [N ]')是未定義的行爲。 –

回答

1

只需調用該函數爲:

int ans= bestpath(A, N, 0, 0); 

,改變你的函數聲明:

int bestpath(int A[N][N], int x, int x, int y); 

你需要周圍代碼移到得到它通過進一步的編譯,這裏是online sample

+0

但我需要用戶輸入N. – Chocolava

+0

@poonamkohli:然後用'的std :: VECTOR',那是什麼'的std :: VECTOR'是。可變長度數組不是標準的一部分,您的代碼可能無法移植到某些不支持它們的編譯器。 –