Indexparameterübergabe
-
Hallo liebe Community,
ich hätte da mal ne Frage. Und zwar habe ich beispielsweise eine Struktur. Von dieser Struktur lege ich nun ein Objekt(Array) an, mit genau 20 Elementen. Nun habe ich eine Funktion, die das Objekt, samt der Elemente erwartet.
Was ich bereits getestet habe:void Funktion(Strukturname &referenzName);Jedoch bekomme ich hierdrüber nur eine Referenz auf das Objekt und nicht auf die Elemente. Sprich, ich bekomme das Objekt einfach nur als Objekt, ohne Elemente. Was ich auch schon versucht habe:
void Funktion(Strukturname neuesObjekt[]);Scheint aber wohl auch nicht zu funktionieren.
Eventuell hat ja sogar einer verstanden, was mein Problem ist. Also, wie hole ich mir das Objekt mit den Elementen?
Ich dnake vielmals im Voraus!
-
Pointer statt Referenz übergeben?
Container verwenden statt herkömmliches Array?
-
Du willst deiner Funktion einen Array mit genau 20 Elementen übergeben? Das sollte eigentlich kein Problem sein, nur gefällt dir die Syntax vielleicht nicht so:
void foo(int (&bar)[20]); ... .. . // Verwendung: int qux[20]; // Ein Array foo(qux); // Übergibt eine Referenz auf deinen Array an foo.In deinem Fall:
void Funktion(Strukturname (&neuesObjekt)[20]);Aber bitte mit den Bounds aufpassen

MfG
-
Hallo,
wow, das ging ja schnell. Erstmal vielen lieben Dank für die Antwort. Mich würde jetzt noch interessieren, wie man sich das Array holt, wenn man nicht weiss, wieviele Elemente es hat?Und dann noch eine Frage: Warum denn "(&xyz)"? Verstehe ich nicht ganz.
Danke!
-
Wenn die Anzahl der Elemente unbekannt ist, kannst du den Array nicht übergeben. Du kannst dann, wie bereits vorgeschlagen wurde, einen Zeiger auf das erste Element im Array übergeben und ein Offset zum Zeiger addieren, um auf die Elemente zugreifen zu können. Da man aber so die Anzahl der Elemente nicht mehr herausfinden kann, ist diese Vorgehensweise eher unbeliebt. Stattdessen würde ich eine Referenz auf einen
std::vectorvorschlagen.
Miriam_ schrieb:
Warum denn "(&xyz)"? Verstehe ich nicht ganz.
Das ist eine Sache mit der Priorität der Operatoren; Klammern haben immer die höchste Priorität.
T (&)[U]ist eine Referenz auf einen Array mitUElementen vom TypT. Analog dazu istT (*)[U]ein Zeiger auf einen Array mitUElementen vom TypT.T &[U]wäre ein Array mitUReferenzen aufT, was aber aufgrund der Semantik von Referenzen vom C++-Compiler nicht angenommen wird.T *[U]ist analog dazu ein Array mitUZeigern aufT.MfG