2016-06-23 5 views
1

Ich habe gelesen, dass, um eine Funktion mit einem zweidimensionalen Array als Parameter zu deklarieren, ich die Anzahl der Spalten des Arrays angeben muss, aber wenn ich die Größe der Matrix nicht kenne Verwenden Sie den Doppelzeiger. Allerdings kann ich diesen Prozess nicht gut verstehen, kann mir jemand ein kurzes und einfaches Beispiel für diese Art von Funktion geben?Funktion mit zweidimensionalem Array als Parameter

Danke

Auch habe ich versucht, ein Programm zu schreiben, aber es gibt mir eine Warnung.

#include<stdio.h> 

int diagonal(int**,int);--->first note 

int main(){ 
    int N; 
    scanf("%d",&N); 
    int array[N][N]; 
    int i; 
    int j; 
    printf("Insert the numbers:\n"); 
    for(i=0;i<N;i++){ 
      for(j=0;j<N;j++){ 
      scanf("%d",&array[i][i]); 
      } 
    } 
    diagonal(&array[N][N],N); ---->second warning 
} 

int diagonal(int**A,int N){ 
    int i; 
    int condition=0; 
    for(i=0;i<N-1;i++){ 
     if(A[0][0]!=A[i+1][i+1]){ 
      return -1; 
     }else{ 
      condition=1; 
     } 
    } 
    if(condition==1){ 
     int val=A[i][i]; 
     int sum= N*val; 
     return sum; 
    } 
} 

Compiler Ausgang:

3|note: expected 'int **' but argument is of type 'int *'| 

17|warning: passing argument 1 of 'diagonal' from incompatible pointer type| 


||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===| 

Das Programm sollte eine Matrix scannen, und die Summe der Elemente auf der Hauptdiagonale zurück, wenn die Elemente auf der Diagonalen den gleichen Wert haben return -1, falls nicht.

Antwort

2

Wenn Sie eine variable Größe Array als Argument verwenden möchten, müssen Sie die Größe zuerst angeben, verwenden Sie dann diese Parameter als Array-Größe in der Array-Argument:

int diagonal(int N, int A[N][N]); 

int main() { 
    ... 
    diagonal(N, array); 
} 

int diagonal(int N, int A[N][N]){ 
    ... 
} 
+0

Ich bin Entschuldigung, wenn die Frage dumm klingt, aber ich bin ein Anfänger. In der Deklaration sollte ich nicht die "N" Parameter löschen? ich meine, wenn ich int diagonal setzen (Int N, Int A [N] [N]); der Compiler sagt, dass "N" nicht deklariert ist und wenn ich "N" lösche, wird das Programm nicht ausgeführt –

+0

@ GiorgioM. In den meisten Fällen sind die Parameternamen in einer Deklaration nicht erforderlich, aber in diesem Fall ist es erforderlich, dass der Compiler weiß, dass es sich um ein Array variabler Größe handelt und was die Größe angibt. Der Versuch, den Array-Parameter als int [] [] zu deklarieren, ist eine unvollständige Deklaration. – dbush

+0

Ahhh vergiss es jetzt funktioniert es. Vielen Dank und danke an alle Leute, die geantwortet haben –

1

17 | Warnung: Übergeben des Arguments 1 von 'diagonal' vom inkompatiblen Zeigertyp |

diagonal(&array[N][N],N); //---->warning 

hier &array[N][N] ist vom Typ int* aber Funktionsdefinition:

int diagonal (int **, int);

hat ersten Argumenttyp wie int** also Sie senden falschen Typ als Argument. das ist der Grund, warum du diese Warnung bekommst.

1

Sie übergeben Ihr Array falsch. Sie sollten array statt &array[N][N] übergeben. Wenn Sie &array[N][N] tun, erhalten Sie nur die Adresse von [N] [N] Array-Element und übergeben Sie es, es ist ungültige Adresse.

diagonal(array, N); 

Auch wenn Sie scanf tun, Sie wollten wahrscheinlich [i][j] Element bekommen, aber Sie tun [i][i] zweimal.

scanf("%d", &array[i][j]);