Wie ein 2D-Array mit Zeiger in C übergeben?
Ich Lerne C und habe Probleme beim übergeben der Zeiger von einem 2D-array auf eine andere Funktion, dann druckt das 2D-array. Jede Hilfe würde geschätzt werden.
int main( void ){
char array[50][50];
int SIZE;
...call function to fill array... this part works.
printarray( array, SIZE );
}
void printarray( char **array, int SIZE ){
int i;
int j;
for( j = 0; j < SIZE; j++ ){
for( i = 0; i < SIZE; i ++){
printf( "%c ", array[j][i] );
}
printf( "\n" );
}
}
Kommentar zu dem Problem
void printarray( char array[][50], int SIZE )
Während es möglich ist, dies zu tun, sind Sie besser dran, konvertieren es in ein 1D-array und die Verwendung von
j*SIZE+i
zu indizieren. @Dave warum? ...............................(nur filler)
@kotlomoy, weil C ' n-D-array-syntax mehrdeutig ist am besten, und die Indizierung manuell zwingt Sie zu prüfen, den Speicher um (oft nützlich für die Cache-Leistung). Auch bedeutet es, wechseln Sie nahtlos auf die Verwendung einer dynamischen Größe array (via
malloc
) in die Zukunft. InformationsquelleAutor der Frage user1362058 | 2013-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
char **
stellen nicht ein 2D-array wäre es ein array von Zeigern auf Zeiger. Sie müssen zum ändern der definitionprintarray
wenn Sie möchten, übergeben Sie es zu einem 2D-array:beziehungsweise:
InformationsquelleAutor der Antwort Carl Norum
In main () die variable "array" deklariert wird
Dies ist eine 2500 byte Daten. Wenn main()'s "array" übergeben wird, es ist ein Zeiger auf den Anfang der Daten. Es ist ein Zeiger auf ein char erwartet werden, organisiert in Reihen von 50.
Noch in Funktion printarray(), erklären Sie
"array" ist hier ein Zeiger auf "char *" Zeiger".
@Lucus Vorschlag "void printarray( char array[][50], int SIZE )" funktioniert, außer, dass es nicht generisch, dass Sie Ihre SIZE-parameter muss 50.
Idee:
Niederlage (yeech) der Typ des Parameters array in printarray()
Eine elegantere Lösung ist, den "array" in main() ein array von Zeigern.
InformationsquelleAutor der Antwort chux
Seit C99 unterstützt dynamische Größe von arrays, die folgenden Stil ist einfach bequemer zu passieren, ein 2-dim array:
InformationsquelleAutor der Antwort Simon Woo
Können Sie leicht passieren das 2d-array mit double-Zeiger.
Vollständige Code : Ideone
InformationsquelleAutor der Antwort rashedcs