2016-07-05 10 views
-4

Ich möchte ein zweidimensionales Array an eine Funktion übergeben, um es zu drucken. Hier ist mein Code so weit. Wie Sie auf dem Kommentar sehen können, kompiliert es nicht, wegen eines inkompatiblen Typs.C++ zweidimensionales Array an Funktion übergeben

FRAGE

Wie kann ich die zweidimensionale Anordnung zu printIt passieren? Wenn ich es printIt(int a(*)[50][50]) stelle ich während der Kompilierung die anderen Fehler erhalten, weil returning array is not allowed

using namespace std; 

void printIt(int a[50][50]); 

int main(int args, char *argv[]) 
{ 
    int a[50][50]; 
    int j = 0; 
    for (int i = 1; i < 6; i++) 
    { 
     a[i][j] = i; 
     // the same should be printed out inside printIt 
     cout << " " << a[i][j]; 
     // not compiling 
     // argument of type int is incompatible with int(*)[50] 
     printIt(a[i][j]); 
    } 
} 

void printIt(int a[50][50]) 
{ 
    cout << " " << a[50][50]; 
} 
+3

Sie müssen 'printIt (a);' .und 'a [50] [50];' aufrufen, greift auf das Array außerhalb der Grenzen zu. Ich sehe keinen Sinn darin, was Sie in Ihrem Code tun. Was willst du eigentlich erreichen? –

+1

Sie sehen Müllwerte gedruckt, nicht _ "der Speicherort" _. –

+0

Wenn ich ein [50] [50] mache, lautet das Ergebnis 7862380. Dies ist nur eine kleine Lernsache hier. Ich spielte mit zweidimensionalen Arrays herum und druckte das Ergebnis. Also dachte ich, wie kann ich das zu einer separaten Funktion extrahieren, aber das ist, wo ich stecke – xhallix

Antwort

1

Da a[i][j] in einer ganzen Zahl, es ist ein Wert ist. Sie passieren Wert nicht ein Double Array Ihr Code so aussehen sollte:

#include <iostream> 
using namespace std; 

void printIt(int a) 
{ 
    cout << " " << a; 
} 

int main(int args, char *argv[]) 
{ 
    int a[50][50]; 
    int j = 0; 
    for (int i = 1; i < 6; i++) 
    { 
     a[i][j] = i; 
     // the same should be printed out inside printIt 
     cout << " " << a[i][j]; 
     // not compiling 
     // argument of type int is incompatible with int(*)[50] 
     printIt(a[i][j]); 
    } 
} 
+0

ah ja, ich sehe, das ist kein Array, das ich überlasse, aber in diesem Fall eine normale ganze Zahl. Vielen Dank! – xhallix

+0

Weil Sie ein 2D-Array namens a haben. Was Sie in Parametern für 'printInt()' übergeben, ist eine Ganzzahl, der Wert, der sich in der Position 'a [i] [j]' befindet. Sie übergeben kein Array, aber einen Wert – Hearner

+0

danke, wird aber ~ 5 weitere min zu akzeptieren – xhallix

3

zu einem int

int a[50][50]; 

a[i][j] wertet gegeben.

a[i] wertet int [50], ein Array von 50 ganzen Zahlen. Wenn es als Argument für einen Funktionsaufruf verwendet wird, wird a[i] in den meisten Fällen zu int*. In seltenen Fällen konvertiert es zu int (&)[50].

Bei Verwendung als Argument für einen Funktionsaufruf wird in den meisten Fällen a in int (*)[50] aufgelöst. In seltenen Fällen konvertiert es zu int (&)[50][50].

In Ihrem Fall die Funktionsdeklaration

void printIt(int a[50][50]); 

entspricht

void printIt(int a[][50]); 

und

void printIt(int (*a)[50]); 

Daher

printIt(a); 
012 unter Verwendung von

ist die richtige Methode zum Aufruf der Funktion.

jedoch

Given die Art und Weise Sie das Argument in printIt verwenden, werden Sie wahrscheinlich gemeint zu verwenden:

void printIt(int num) 
{ 
    cout << " " << num; 
} 

Danach ist es OK zu verwenden:

printIt(a[i][j]); 

in main.

+0

Vielen Dank für diese Erklärung)) – xhallix

Verwandte Themen