Referenz als Funktionsparameter
-
Hey,
Ich habe eine Funktion (hierfür mal ausgedacht):
knoten* suche(int key, int &vergleiche){ knoten *curr_knt = this->start; vergleiche = 1 while (curr_knt->key != key){ bla bla vergleiche = vergleiche + 1; } return curr_knt; }Der Aufruf wäre dann in etwa so:
int vergleich = 0; cout << suche(22, vergleich) << vergleich << endl;In der Funktion wird der Inhalt der Adresse von "vergleich" ja immer inkrementiert. Aber bei der Ausgabe bleibt er 0. Das verstehe ich nicht.
-
ITrun90 schrieb:
In der Funktion wird der Inhalt der Adresse von "vergleich" ja immer inkrementiert.
Naja.
vergleichwird inkrementiert.Und was die Ausgabe angeht: Es ist nicht festgelegt, ob erst
vergleichodersuche(22, vergleich)ausgewertet wird. In deinem Fall ist es offensichtlichvergleich. Google mal "c++ sequence point".
-
Achsoooooo,
Danke.Habs nun so gemacht:
cout << suche(22, vergleich) << endl; cout << vergleich << endl;
-
ITrun90 schrieb:
Habs nun so gemacht:
cout << suche(22, vergleich) << endl; cout << vergleich << endl;Was weitgehend anders ist als das, was du (vermutlich) mit dem ersten Code erhalten wolltest? Wozu das ständige endl? Weißt du, was endl tut? (Im Vergleich zu '\n')
-
Das Problem mit endl ist doch, dass man in jedem schlechten Anfängerbuch gelernt bekommt, das zu benutzen, wenn man einen Zeilenumbruch möchte...
@ITrun90: Verwende statt endl lieber '\n'.
Das ist performanter als endl, da endl jedes mal noch den Ausgabepuffer flusht.
Wenn du also längere mehrzeilige Ausgaben hast, solltest du die inneren Umbrüche mit '\n' machen und maximal am Ende ein std::endl ranhängen.
Ein flushen des Streams nach jeder Zeile ist in der Regel unnötig.