Frage zur Schreibweise: int func (int *& a); und int func (int * a);
-
Schrebweise schrieb:
Hallo wo ist der Unterschied zwischen diesen beiden Funktionen?
Die erste nimmt eine Int-Adresse als Wert entgegen. Die zweite bekommt eine Referenz auf einen Int-Zeiger, so dass innerhalb der Funktion der Zeiger des Aufrufers geändert werden kann.
Mein Vorredner hat vollkommen Recht. *& ist hier gar nichts besonderes.
-
Schrebweise schrieb:
Hallo wo ist der Unterschied zwischen diesen beiden Funktionen?
int func (int * a);
In dieser Schreibweise hab ich das noch nicht gesehen:
int func (int *& a);int func (int * a);Dast ist call-by-value. D.h. das Argument wird kopiert. D.h. der Zeiger wird kopiert. D.h. du kannst in der Funktion nicht mit dem originalen Zeiger arbeiten.
int func (int *& a);Dast ist call-by-reference. D.h. du erhälst eine Referenz auf das Argument, also einen Aliasnamen. D.h. der Zeiger wird nicht kopiert. D.h. du arbeitest in der Funktion mit dem originalen Zeiger.
Mir fällt gerade kein Anwendungsfall ein, wo eine Referenz auf einen Zeiger sinnvoll wäre.
-
Also ist: int func (int *& a); dasselbe wie: int func (int & a);
Wieso erlaubt der Standard sowas? Das verwirrt doch nur ...
-
Schrebweise schrieb:
Also ist: int func (int *& a); dasselbe wie: int func (int & a);
Nein, wie kommst du darauf?
-
Schrebweise schrieb:
Also ist: int func (int *& a); dasselbe wie: int func (int & a);
Wieso erlaubt der Standard sowas? Das verwirrt doch nur ...
Hast du meinen Beitrag gelesen? Eines ist call-by-reference und eines ist call-by-value.
-
-
out schrieb:
Mir fällt gerade kein Anwendungsfall ein, wo eine Referenz auf einen Zeiger sinnvoll wäre.
Och, bei selbstgestrickten Listen (o.ä.) könnte das praktisch sein:
struct node { int value; node* next; }; void push(node* & stack, int value) { node* n = new node; n->value = value; n->next = stack; stack = n; }
-
Stimmt, da hab ich Müll geschrieben.
Ich habs mir gerade mal im Disassmbler angeschaut und meinen Fehler entdeckt.
-
Schrebweise schrieb:
Stimmt, da hab ich Müll geschrieben.
Ich habs mir gerade mal im Disassmbler angeschaut und meinen Fehler entdeckt.Ich würde mal tippen, dass du im Disassembler keinen unterschied zwischen int** und int*& als Funktionsparameter sehen wirst.

-
out schrieb:
Mir fällt gerade kein Anwendungsfall ein, wo eine Referenz auf einen Zeiger sinnvoll wäre.
Mir schon... Nachdem ich einmal ein Programm erlebt habe wo Teilweise mit 5fach-Zeigern gearbeitet wurde. Eine Zeigerreferenz ist häufig angenehmer in der Handhabung als ein Mehrfachzeiger (Anderseits bin ich in C++ auch nur selten auf Mehrfachzeiger gestoßen).