Funktionen mit Zeiger-Paramtern und Adress-Parametern?
-
Hi,
meine Frage lautet: wenn ich eine Funktion deklariere, die Zeiger oder Adressen als Parameter erwartet, was passiert da eigentlich genau?
Standard Beispiel:
void swap(int *x, int* y){ int tmp; tmp = *a; *a = *b; *b = tmp; }aufruf:
... swap( &a, &b); ...Erläuterung:
* Dereferienzierungoperator! Also int Ptr; bedeutet Ptr Nsme der Zeigervariablen, int ist der Typ der referenzierten Variable.
also kann z.B. int x; mit Ptr = &x; Ptr x referenzieren.
Also auch swap(&..,&...) und in der Deklaration swap(...,*,..)
Um jetzt aber x zu ändern nehme ich *Ptr = 1; Also in der Funktion z.B.
tmp = *a; bzw. *b = tmp;Was aber muß ich denn deklarieren wenn ich so eine Funtionsdeklaration habe...
tuwas(int &a, int &b)?Etwas so: tuwas (x ,y); oder (*x, *y)?
was wenn ich tuwas(int *x, int *y) mit tuwas(*a, *b) aufrufe? ist das dann sowas wie "**".Ich meine das gleiche gilt dann ja auch für int , float oder sogar für Klassen?
Ich steig da nicht durch. Kann mir das jemand für mich dummie erklären wie diese Zeigerzeug funktionert?
Gru0
Frank
-
FrankTheFox schrieb:
Was aber muß ich denn deklarieren wenn ich so eine Funtionsdeklaration habe...
tuwas(int &a, int &b)?die Frage leuchtet mir zwar nicht so ganz ein (du hast doch schon eine Deklaration, du musst nix mehr deklarieren
), aber das hier hat nichts mit Zeigern zu tun (zumindest nicht, was die Anwendung für dich betrifft). Das sind Referenzen. Die Funktion rufst du dann so auf:tuwas(a,b);Da ist kein Adressoperator o.ä. nötig.
Der Zeiger-Kram ist eigentlich ganz simpel. Der Adressoperator gibt dir die Adresse einer Variablen, der Dereferenzierungsoperator dereferenziert eine Adresse lässt dich auf den Wert zugreifen. Fertig!
So ganz genau erfährst du den ganzen Quatsch am besten aus einem Buch/Tutorial...
-
Hallo,
ja da habe ich mich komisch ausgedrückt. Ist ja noch früh am Morgen ;).
Ok wenn ich also tuwas(int &a,int &b) nutze dann muß ich keinen Zeiger deklarieren, sondern nehme mir dann Datentypen (zu denen dann ja auch Klassen gehören) her. Was ich aber schon gesehen habe ist (meistens bei Klassen) also zum Beispiel...
tuwas(int *a, int*b). Aufruf tuwas(*x,*y)???
Gruß
Frank
-
FrankTheFox schrieb:
tuwas(int *a, int*b). Aufruf tuwas(*x,*y)???
Dann wäre x/y ein int**, also ein Zeiger auf einen Zeiger. Dieser Aufruf hat dann aber eher mit dem Typ von x/y zu tun und weniger mit der Funktionsdeklaration. Wäre x/y eine normale int-Variable, würdest du einfach tuwas(&x,&y) aufrufen.