Verständisproblem bei Zeigern
-
redrew99 schrieb:
Schließlich erwartet die Funktion "tausch" doch die Adresse zweier Variablen und nicht deren Inhalt, oder?
Ja, das ist richtig. Aber in a und b in Zeile 17 sind ja Adressen, denn sie sind ja
void swab(int *a,int *b,int *c)so definiert und nicht etwas so
void swab(int a,int b,int *c)
-
Nicht zu vergessen ist, dass die STD auch Funktionen für das Austauschen (
std::swapaus<algorithm>) und sogar für das Sortieren (std::sortaus<algorithm>) oder wenn die Sortierung stabil sein soll kann man auch die stabile Sortierung der STD nutzen (std::stable_sortaus<algorithm>).
-
Nexus schrieb:
P.S.: Erst jetzt aufgefallen: Normalerweise schreibt man "swap" und nicht "swab"

Die Funktion
swabsolltesortheissen und die Funktiontauschsollte manswapnennen.
-
Übrigens schreibt man am Ende der Funktionsdefinition kein Semikolon!
PS: Sorry wegen den drei Beiträgen nacheinander.
-
EOutOfResources schrieb:
Nicht zu vergessen ist, dass die STD auch Funktionen für das Austauschen (
std::swapaus<algorithm>) und sogar für das Sortieren (std::sortaus<algorithm>) oder wenn die Sortierung stabil sein soll kann man auch die stabile Sortierung der STD nutzen (std::stable_swapaus<algorithm>).Ja, wollte ganz gerne den Umgang mit Zeigern im Zusammenhang mit Funktionen lernen, das Sortierprogramm ist da eher zufällig.
Nexus schrieb:
P.S.: Erst jetzt aufgefallen: Normalerweise schreibt man "swap" und nicht "swab"
"swab" habe ich deshalb geschrieben, damit es nicht zu Verwechslungen mit der gleichnamigen, in der iostream-Bibliothek enthaltenen Funktion kommt.
EOutOfResources schrieb:
Übrigens schreibt man am Ende der Funktionsdefinition kein Semikolon!
Ok.
In dem Tutorial( http://www.c-plusplus.net/cms/modules.php?op=modload&name=Downloads&file=index&req=getit&lid=15&nocache=1 )wird das so praktiziert.
-
EOutOfResources schrieb:
redrew99 schrieb:
Ich verstehe leider nicht, warum es z.B. in Zeile 17 nicht
tausch(&b,&a);heißen müßte.
Weil
aundbin diesem Scope bereits vom Typint*sind.Ok,danke.
EOutOfResources schrieb:
Und lese dich in das Kapitel "Referenzen" deines Buches ein.
Werde ich auf jeden Fall noch machen. In dem Tutorial wird von der Verwendung von Referenzen in diesem Zusammenhang abgeraten, deshalb habe ich Zeiger genommen.
-
redrew99 schrieb:
"swab" habe ich deshalb geschrieben, damit es nicht zu Verwechslungen mit der gleichnamigen, in der iostream-Bibliothek enthaltenen Funktion kommt.
Genau deshalb rate ich immer vor der Verwendung von "
using namespace std;ab.PS: Das Tutorial ist alt. Man sieht es an folgendem Code:
#include <iostream.h> //Fehler 1: <iostream> wäre korrekt void main() //Fehler 2: int sollte der Rückgabewert sein { int a=1; int &ra=a; cout<<"a: "<<a<<endl; //Fehler 3: cout ist im Namensbereich std ra=2; cout<<"a: "<<a<<endl; }; //Ich denke, dass das der vierte Fehler ist aber bin mir nicht sicher
-
EOutOfResources schrieb:
Nicht zu vergessen ist, dass die STD auch Funktionen für das Austauschen (
std::swapaus<algorithm>) und sogar für das Sortieren (std::sortaus<algorithm>) oder wenn die Sortierung stabil sein soll kann man auch die stabile Sortierung der STD nutzen (std::stable_swapaus<algorithm>).stable_swap? Du meinst sicher stable_sort.
-
Ich versteh, dass das eine Übung zu Zeigern ist, aber haben Zeiger in diesem konkreten Anwendungsfall Vorteile gegenüber Referenzen? Oder gibt es andere triftige Gründe, warum sie hier verwendet werden sollten?
Edit: die Frage ging an die Experten im Forum.
-
@[Rewind]: Dies ist sogar ein Paradebeispiel dafür, wo man Referenzen statt Zeigern verwenden sollte.
-
DocShoe schrieb:
Du meinst sicher stable_sort.
Oh man, wie peinlich. Ich habs gefixt.
-
Das Tutorial, wo konkret für dieses Beispiel von der Vewendung von Referenzen abgeraten wird, wird hier in diesem Forum empfohlen.
s. Lektion 37