Zweidimensionales Array an Funktion übergeben
-
Hallo ...
Ich habe ein Problem ein 2-dimensionales Array vom Typ bool zu übergeben.Die Idee war es das Array global zu deklarieren und dann per extern für die Funktion bekannt zu machen.
const int x=5; const int y=5; bool array[x][y]; int main() { ausgabe(); return 0; }
Die Funktion ist eine extra Datei und wird per Header angesprochen.
extern bool array; void ausgabe(bool array) { . . }
kann mir einer helfen und sagen wo der Fehler liegt...
-
naben der Tatsache, dass ich extern nicht nutzen würde ist ein zweidimensionales Array ein Array von Arrays, oder ein Zeiger auf eine Liste von Zeigern auf Zeiger, welche auf eine Element-Liste zeigen...
void ausgabe(bool **array) { . . }
edit:btw: was soll das extern in diesem falle bewirken?
-
DocJunioR schrieb:
naben der Tatsache, dass ich extern nicht nutzen würde ist ein zweidimensionales Array ein Array von Arrays, oder ein Zeiger auf eine Liste von Zeigern auf Zeiger, welche auf eine Element-Liste zeigen...
void ausgabe(bool **array) { . . }
edit:btw: was soll das extern in diesem falle bewirken?
A a[M][N] != A** a
Wenn man die Definition int a[10][10] hat, dann ist a kein int**. Genauso wenig wie bei int a[10] a ein int* ist.
-
Mit extern wird nicht noch einmal Speicher für die Variable allokiert, denn das Programm kennt die Speicheradresse von dem array und man kann so direkt darauf zugreifen.
Mit Zeigern wollte ich nicht arbeiten...
ich weiß auch nicht, wie ich jetzt die Dimensionen mit dem Zeiger angeben kann.
Kannst du das vielleicht noch etwas genauer schreiben?
Danke!
-
Wenns external ist, brauchts dock keine Parameterübergabe mehr.
Verwende ich bei großen Arrays auch öfter, um in meiner Software
Speicher zu sparen und Parametergedöns zu vermeiden - ist aber
auch Geschmacks- und Ansichtssache
-
also brauche ich im Hauptprogramm nur
ausgabe();
aufrufen und in der Funktion dann nur
extern bool array; void ausgabe() { . . }
Wäre das so richtig? Oder ist die Syntax falsch?
-
ist dann zwar richtig, aber hochgradig gefährlich, weil überhaupt nicht wiederverwendbarer code.
-
DocJunioR schrieb:
naben der Tatsache, dass ich extern nicht nutzen würde ist ein zweidimensionales Array ein Array von Arrays, oder ein Zeiger auf eine Liste von Zeigern auf Zeiger, welche auf eine Element-Liste zeigen...
Ohoh! Wenn das der camper sieht!
-
Hallo,
ich bin einer der "Mitentwickler" von resis.
Das Problem, dass wir haben ist eigentlich ganz banal. Wir wollen ein zweidimensionales Array global deklarieren, um es so auch in anderen cpp-Dateien zu verwenden. Uns fehlt bloß die Syntax um das Array korrekt zu deklarieren. Wisst ihr wie das geht?
Schonmal danke für die Hilfe!
-
warum wollt ihr es global deklarieren? ihr könnt es doch per funktionsparameter aus dem Hauptprogramm übergeben.
aber ansonsten per extern, dann ist es global in der jeweiligen. cpp und sollte überall aufrufbar sein.
Instanziierungen, bzw. Definitionen sind in headern imo nicht möglich.
-
Es ginge auch per Übergabe aber wir wollen es global machen.
Kannst du uns bitte die Syntax schreiben, wie es man es korrekt deklariert.
Wir haben bis jetzt im Hauptprogramm global deklariert:bool array [5] [6];
Und in der anderen .cpp ebenfalls global:
extern bool array;
Das funzt nich... Compiler schmeißt einen Fehler.
-
DocJunioR schrieb:
ist dann zwar richtig, aber hochgradig gefährlich, weil überhaupt nicht wiederverwendbarer code.
Das stimmt nicht.
DocJunioR schrieb:
...dann ist es global in der jeweiligen. cpp und sollte überall aufrufbar sein.
In C haben die Dateien die Endung *.c
DocJunioR schrieb:
Instanziierungen, bzw. Definitionen sind in headern imo nicht möglich.
Das ist falsch.
@el-niki & resis
// xyz1.c
int array[3][4];// xyz2.c
extern int array[3][4];
-
lass dich bloß nich dazu hinreißen, deine aussagen mal zu begründen..
ja, in c heißt des .c, nich .cpp ist aber die gleiche mimik.
btw: aufgrund der endung wirds auch kein besserer stil.
-
lölöjlöölöl schrieb:
@el-niki & resis
// xyz1.c
int array[3][4];// xyz2.c
extern int array[3][4];Das funzt leider nicht. Ham wir auch schon probiert.
Wir benutzen c++, macht das vielleicht einen Unterschied?
-
da muss schon eine von beiden die andere inkludieren..
-
el-niki schrieb:
Wir benutzen c++, macht das vielleicht einen Unterschied?
Ja, C++ kann das nicht.
-
el-niki schrieb:
lölöjlöölöl schrieb:
@el-niki & resis
// xyz1.c
int array[3][4];// xyz2.c
extern int array[3][4];Das funzt leider nicht. Ham wir auch schon probiert.
Wir benutzen c++, macht das vielleicht einen Unterschied?"funzt nicht" ist keine Fehlerbeschreibung - der schlampige Umgang mit Typspezifikationen lässt auch spezifische Vermutungen hinsichtlich des Fehlers nicht zu:
bool array [5] [6];
und
extern bool array;
sind natürlich nicht kompatibel.
-
Und wie macht man das? Kannst du mir bitte die Syntax dazu schicken?
-
extern bool array[][];
würdsch mal so tippen.. befasse mich aber unoft mit sowas..
-
OK, ich halte fest: Wir können globale zweidimensionale Arrays nicht in anderen cpp-Dateien verwenden, es sei denn wir benutzen Zeiger, richtig?
Falls es doch möglich ist, bitte ich um die korrekte Syntax.