?
Honky schrieb:
Ja ich weis das das & das Zeichen für ne Referenz is und der Stren eines für Zeiger nur in meinem Buch steht dass diese Variante das normale Call by Reference ist und zwar so:
void callbyreference( int* a, int *b );
//Funktionsaufruf
callbyrefrence( &iwert1, &iwert2 );
Und dies ist nur die NAchgebildete version des Call by Reference:
void callbyreference2( int &a, int &b )
//Funktionsaufruf
callbyreference2( wert1, wert2 )
oder hab ich da etwas falsch verstanden.
Ich nehme an, dass der Grund, dass er so was schreibt, ist, dass es in C keine Referenzen gibt und call-by-reference dort über Zeiger nachgebildet werden muss (C ist ja schon recht alt). In C++ dagegen gibt es echte Referenzen, wodurch die Zeiger-Methode für call-by-reference überflüssig wird. In der Tat reicht man in C++ üblicherweise für alles außer Basistypen Referenzen herum (meistens Referenzen auf Konstanten); insbesondere im Zusammenhang mit Polymorphie ist alles andere völlig abwegig, und auch bei sonstigen komplexen Datentypen spart man sich damit eine Menge Kopieraufwand.
Wie dem auch sei, es ist häufig so, dass der Compiler Referenzübergabe in Maschinensprache übersetzt, die das selbe macht wie die Zeigerübergabe, aber vom Standard vorgeschrieben ist das nicht. Vorgeschrieben ist lediglich die Semantik, nicht, wie diese erreicht wird - findet ein Compiler einen besseren Weg, darf er diesen benutzen.
Was Jürgen Wolf angeht...für mich sieht es so aus, als habe er C "gelernt", wie man das von Webdesignern kennt - probieren geht über studieren, und wenn's bei mir läuft, wird's schon richtig sein. Eigentlich sollte er das oben verlinkte Buch "Grundkurs $MEIN_COMPILER" nennen, und selbst da ist es zweifelhaft, ob seine Beispiele in der nächsten Version noch funktionieren. Er ist ein anschauliches Beispiel des Dunning-Kruger-Effekts.