003
17.06.2009, 11:43 Uhr
~arnold72
Gast
|
und was das für einen sinn hat..
wenn du jetzt zb einen neuen thread startest, da kannste du nur einen pointer als parameter übergeben. wenn du aber jetzt mehrere variablen übergeben willst, packst du die einfach alle in eine struktur, und übergibst dem neuen thread einfach einen pointer auf die neue struktur.
oder halt wenn du dynamisch programmierst.. wenn du zb ein array haben willst, du aber noch nicht weisst wieviele werte da rein sollen. ein statisches sieht ja so aus:
da passen dann 10 werte rein. (von werte[0] bis werte[9]). diese array kannst du nicht in der größe ändern. wenn du das array aber dynamisch machst
C++: |
int anzahl = 20; int *werte = new int[anzahl];
|
so kannst du die größe dynamisch zur laufzeit festsetzen, kannst das array aber immer noch ändern in der größe.
und referenzen haben mehrere daseins-berechtigungen.. zum einen kann man die ausführungsgeschwindigkeit optimieren, zum anderen kann man sich damit rückgabewerte sparen.
also zu punkt 1: angenommen du hast diese funktion:
C++: |
int addieren(int a, int b) { return a+b; }
|
wenn du die dann aufrufst:
C++: |
int x, y, ergebnis; x = 12; y = 3; ergebnis = addieren(x, y);
|
dann erzeugt der compiler eine neue instanz von den variablen x und y. sprich er allokiert neuen speicher, und kopiert die werte aus x und y in den neuen speicher. wenn du die werte als referenz übergibst, werden die halt direkt übergeben, was natürlich schneller ist. allerdings können die variablen aber auch in der funktion verändert werden.
C++: |
int aendern(int &a, int &b) { a *= 2; b *= 2; return a+b; }
int x, y; x = 10; y = 5; // also vorher x = 10, y = 5 aendern(x, y); // nachher: x = 20, y = 10
|
manchmal ist dieser effekt gewünscht. in den meisten fällen sollen die variablen aber nicht verändert werden können. deshalb setzt man die referenzen konstant:
C++: |
int addieren(const int &a, const int &b);
|
jetzt kann man die variablen nicht mehr ändern, hat aber immer noch den geschwindigkeitsvorteil..
soo, ich hoffe ich konnte dir ein wenig helfen.. |