char array als pointer argument
-
Hallo,
Ich versuche mein char Array als Pointer an eine Funktion weiterzugeben, doch erhalte folgende Fehlermeldung:
cannot convert `char (*)[2][2]' to `char* (*)[2]' for argument `1' to `void test(char* (*)[2])'
Hier ist mein Code:
#include <iostream> using namespace std; void test(char* board[2][2]); int main() { char board[2][2] = {{' ', ' '}, {' ', ' '}}; test(&board); // Do stuff } void test(char* board[2][2]) { *board[0][0] = 'X'; // Do stuff }
Achja, ich benutze Dec-C++ als compiler, doch mit Visual Studios erhielt ich etwa den selben Error.
-
#include <iostream> using namespace std; void test(char(*board)[2]); int main() { char board[2][2] = {{' ', ' '}, {' ', ' '}}; test(board); // Do stuff } void test(char(*board)[2]) { board[0][0] = 'X'; // Do stuff }
-
Klappt nun, danke!
Aber könnteste mir das bitte erklären?
Hab keinen Plan warum du das so machst :p
-
BraucheHilfe schrieb:
Klappt nun, danke!
Aber könnteste mir das bitte erklären?
Hab keinen Plan warum du das so machst :pLese mal nach, wie man Zeiger auf mehrdimensionale Arrays deklariert!
-
BraucheHilfe schrieb:
Ich versuche mein char Array als Pointer an eine Funktion weiterzugeben, doch erhalte folgende Fehlermeldung:
cannot convert `char (*)[2][2]' to `char* (*)[2]' for argument `1' to `void test(char* (*)[2])'
Hier ist mein Code:
void test(char* board[2][2]); int main() { char board[2][2] = {{' ', ' '}, {' ', ' '}}; test(&board); }
Der Subscript-Operator hat eine höhere Präzedenz als das unäre *.
char *board [2][2] <-- hast Du geschrieben char(*board)[2][2] <-- wolltest Du haben
Das erste ist ein Array von Array von Zeigern auf char.
Das zweite ist ein Zeiger auf ein Array von Array von char.Außerdem wird der Typ in der Parameterdeklaration noch angepasst. Handelt es sich auf der obersten Ebene um ein Array, wird einfach ein Zeiger draus gemacht. Deswegen hat der Compiler in der Fehlermeldung aus
char*board[2][2] ---> char*(*board)[2]
gemacht.
Deine test-Funktion hättest Du dann aber auch ändern müssen. Du hast ja einen Zeiger auf das "ArrayArray" übergeben.
void test(char (*p)[2][2]) { p[0][0] = 'x'; // FALSCH (*p)[0][0] = 'x'; // RIGHTIG }
Alternative 1 (Referenz statt Zeiger)
void test(char (&arr)[2][2]) { arr[0][0] = 'x'; } int main() { char arr[2][2]; test(arr); }
Alternative 2 (Array-to-Pointer-Decay)
void test(char (*p)[2]) { // äquivalent zu char p[][2] p[0][0] = 'x'; } int main() { char arr[2][2]; test(arr); // übergibt einen Zeiger auf das erste Element vom Typ char[2] }
Gruß,
SP
-
Hier gibts eine gute Einführung in die Programmierung mit Zeigern in C++.