2012-08-07 2 views
6

Was ist unten falsch?Auf C++ - Zeiger und Referenzen, Klärung benötigt

Es ist mein Verständnis, dass ein Zeiger eine Adresse von etwas von einem Typ darstellt.

So int i = 18, ein Zeiger auf es ist int *pI = &i;

Die folgenden 2 Erklärungen gelten

void foo (int &something) // Will accept an address of something 
void bar (int *something) // Will accept a pointer to something 

Wenn wir eine Funktion als

void bar (int *something) 

erklären besser wir einen Zeiger senden etwas. Tatsächlich funktioniert foo(pI).

der gleichen Logik folgend, wenn bei

void foo (int &something) 

suchen, sollten wir es als Argument für einen int zeigt, eine Adresse etwas senden, damit dann:

Warum ist foo(&i) falsch?

Antwort

5

void foo (int &something) // Will accept an address of something

Dies ist falsch: int& eine Referenz, ein Konzept, das auf Zeiger in gewisser Weise ähnlich ist, aber überhaupt nicht identisch.

Referenzen sind Zeigern insofern ähnlich, als ein Wert durch eine Referenz geändert werden kann, genauso wie er durch einen Zeiger geändert werden kann. Es gibt jedoch keine "Nullreferenz", während NULL-Zeiger sehr häufig sind.

Wenn Sie eine Funktion aufrufen, die eine Referenz nimmt, geben Sie einfach die Variable den Verweis übergeben, auf die Sie einnehmen - kein & Betreiber erforderlich:

void foo (something); // "something" must be a variable 
2

Die Erklärung void foo (int &something) ein reference variable nimmt, kein Zeiger .

Sie nennen es genau das gleiche wie Sie würde void foo (int something) nennen, mit der Ausnahme, dass somethingpassed by reference ist, nicht by value.

0

void foo (int & etwas) // Wird eine Adresse etwas

Nein, akzeptieren, obwohl ich die Verwirrung verstehen kann. Diese Funktion benötigt eine Referenznummer bis int. Referenzen sind garantiert nicht null in einem gut definierten Programm. Es ist konzeptionell einem Zeiger ähnlich, aber semantisch verschieden.

Um diese Funktion aufzurufen, müssen Sie nichts Besonderes tun.

int i = 10; 
foo(i); // passed to foo by reference 
0

Da in C++ die & bedeutet „Referenz-Typ“ wird im Rahmen eines Funktionsprototyp, wie Sie es hier verwenden. Ihre Funktion:

void foo (int &something) 

ist die Angabe tatsächlich, dass eine ganze Zahl Referenztyp übergeben werden sollte, so würden Sie diese Funktion wie diese rufen Sie einfach an:

foo(i); 

Beachten Sie, dass Sie in diesem Fall sind vorbei noch die Adresse von i in die Funktion, aber Sie tun es als Referenztyp und nicht als ein roher Zeiger.

0

Es gibt zwei verschiedene Bedeutungen für &.

Die erste besteht darin, einen Zeiger aus einer vorhandenen Variablen zu erstellen.

Die zweite ist eine Referenz zu machen.

Obwohl sie beide das gleiche Zeichen verwenden, sind sie zwei völlig verschiedene Dinge.