Fehler: Ungültiger Typ 'int[int]' for array subscript
Möchte ich weitergeben dynamisch Größe 2D-array als parameter an eine Funktion. Ich weiß, diese Frage wurde diskutiert, mehrfach in vielen Orten, aber auch nach der Anwendung aller Permutationen und Kombinationen von [] und *, ich habe nicht in der Lage, diese zu arbeiten.
#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;
}
Tritt der Fehler in der Zeile angegeben.
Wenn ich eine änderung der definition einer Funktion zu-
int bestpath(int *A[], int N, int x, int y)
Kommt der Fehler in der aufrufenden Funktion: cannot convert int* int**.
Ich möchte mir meine Grundlagen, die klar von der Verwendung von *A, *A[], **A, und jede andere Art und Weise, in der wir passieren die matrix.
Und gibt es einen anderen, besseren Weg, dies zu tun?
A[N][N]
ist einint
(Sie Zugriff auf das element). Die Adresse dieses ist einint *
.int A[N][N];
verwendet variable length arrays sind eine GCC-Erweiterung.- Zusätzlich zu dem, was @sftrabbit gesagt, auch wenn Sie möglicherweise haben könnte, ein array, dessen Dimensionen angegeben werden, die zur Zeit ausführen,
&A[N][N]
(mitA
erklärtint A[N][N]
) ist Undefiniertes Verhalten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rufen Sie einfach die Funktion als:
Und ändern Sie Ihre Funktion Erklärung:
Brauchen Sie Sie nicht zu bewegen, um code zu kompilieren weiter durch, hier ist die online-Beispiel.
std::vector
, das ist das, wasstd::vector
ist für. Array mit variabler Länge sind nicht Teil der standard-und der code kann nicht tragbar sein, um einige compiler, die Sie nicht unterstützt.