2 Fragen zu Arrays + Funktionen
-
c++ null unterschied. ob du nun int[] oder *int zu dem ding sagst
Inkrementier mal einen Zeiger und inkrementier mal ein Array.

-
Was ich noch nicht so ganz verstehe ist, warum man bei einem Array als Parameter keine Referenz machen muss um es zu ändern...:
void Funk(int arr[10]) { arr[0] = 0; //Wird geändert }wenn ich das gleiche mit einer normalen int-Variable machen würde, dann würde sie ja nicht geändert werden:
void Funk(int var) { var = 5; //Wird nicht geändert }Ich hoffe das stimmt was ich hier sage

-
Ein Array wird immer per Referenz übergeben.
Das heisst, wenn du eine Kopie haben willst, musst du die selber anlegen, oder std::vector o.ä. benutzen.
-
ghorst schrieb:
ansonsten macht c++ null unterschied. ob du nun int[] oder *int zu dem ding sagst, ist gleich.
Arrays sind keine Lvalues. Zeiger schon. Siehe drakon

-
Speedy_92 schrieb:
Was ich noch nicht so ganz verstehe ist, warum man bei einem Array als Parameter keine Referenz machen muss um es zu ändern.
Verständlich gesagt: Bei der Übergabe eines Arrays ist es so als würdest du einen Zeiger übergeben, deswegen weiß die Funktion, wo sich das Array im Speicher befindet und kann es somit modifizieren.
-
Vielen Dank. Alles klar geworden

-
Du musst dir bei der Übergabe eines Arrays immer die Dimension als zusätzlichen Parameter übergeben (oder du arbeitest mit konstanten Werten), da
sizeofinnerhalb der Funktion nicht das gewünschte Ergebnis erzielt, weil die Grösse des Zeigers ermittelt wird.
Wieder ein Grund für std::vector
-
Nexus schrieb:
Du musst dir bei der Übergabe eines Arrays immer die Dimension als zusätzlichen Parameter übergeben (oder du arbeitest mit konstanten Werten), da
sizeofinnerhalb der Funktion nicht das gewünschte Ergebnis erzielt, weil die Grösse des Zeigers ermittelt wird.
Wieder ein Grund für std::vector
Naja... ich möchte ein Feld erstellen. Damit möchte ich hinterher arbeiten, also z.B. mit WINAPI zeichnen... Deshalb finde ich es in diesem Moment schöner mit einer Konstanten Dimension zu arbeiten.
-
Ja, das ist schon okay.
Behalte einfach den
vectorim Hinterkopf, falls du einmal dynamische Arrays benötigst
-
Speedy_92 schrieb:
Nexus schrieb:
Du musst dir bei der Übergabe eines Arrays immer die Dimension als zusätzlichen Parameter übergeben (oder du arbeitest mit konstanten Werten), da
sizeofinnerhalb der Funktion nicht das gewünschte Ergebnis erzielt, weil die Grösse des Zeigers ermittelt wird.
Wieder ein Grund für std::vector
Naja... ich möchte ein Feld erstellen. Damit möchte ich hinterher arbeiten, also z.B. mit WINAPI zeichnen... Deshalb finde ich es in diesem Moment schöner mit einer Konstanten Dimension zu arbeiten.
Das eine hat mit dem anderen doch nichts zu tun. Du kannst ja auch aus einem std::vector mit der WinAPI zeichnen. Wo ist das Problem?
Zusätzlich ist std::vector um einiges komfortabler.
Ansonsten gibt es auch nocht boost::multiarray:
http://www.boost.org/doc/libs/1_36_0/libs/multi_array/doc/index.html
-
Also mit dem Vector habe ich mich schon sehr gut angefreundet

Beim Textdateien-Auslesen ist er mir immer sehr hilfreich
-
drakon schrieb:
Speedy_92 schrieb:
Nexus schrieb:
Du musst dir bei der Übergabe eines Arrays immer die Dimension als zusätzlichen Parameter übergeben (oder du arbeitest mit konstanten Werten), da
sizeofinnerhalb der Funktion nicht das gewünschte Ergebnis erzielt, weil die Grösse des Zeigers ermittelt wird.
Wieder ein Grund für std::vector
Naja... ich möchte ein Feld erstellen. Damit möchte ich hinterher arbeiten, also z.B. mit WINAPI zeichnen... Deshalb finde ich es in diesem Moment schöner mit einer Konstanten Dimension zu arbeiten.
Das eine hat mit dem anderen doch nichts zu tun. Du kannst ja auch aus einem std::vector mit der WinAPI zeichnen. Wo ist das Problem?
Zusätzlich ist std::vector um einiges komfortabler.
Ansonsten gibt es auch nocht boost::multiarray:
http://www.boost.org/doc/libs/1_36_0/libs/multi_array/doc/index.htmlNaja... nur irgendwie finde ich es bei Feldern einfach schöner

-
Speedy_92 schrieb:
Naja... nur irgendwie finde ich es bei Feldern einfach schöner

Plus fehleranfälliger und weniger komfortabel
