Referenztypen und Vergleich mit Zeigern (C ++ - Hinweise)

Referenz ist ein neuer Mechanismus, der von C ++ für die C-Sprache erweitert wurde, und eine neue Methode zur Realisierung der Funktion von Zeigern in der C-Sprache.

Referenztyp
. Referenz (&) ist ein Alias ​​für einen Bezeichner, dh ein Alias ​​für eine Variable.
Wenn Sie eine Referenz definieren, muss diese gleichzeitig initialisiert werden, damit sie auf ein vorhandenes Objekt verweist.

int i=10int& ri=i;//定义int引用ri,并初始化为变量i的引用

Zu diesem Zeitpunkt ist ri äquivalent zu einem anderen Alias ​​der Variablen i, Operation ri ist äquivalent zu Operation i;

int i = 10;
int& ri = i;
ri--;
cout << ri << endl;
cout << i << endl;
//结果是9 9

Nach der Initialisierung der Referenz kann nicht mehr auf andere Objekte verwiesen werden.

Die Ähnlichkeiten und Unterschiede mit Zeigern sind
dieselben:
1. Beide sind das Konzept von Adressen. Der Zeiger zeigt auf ein Stück Speicher, und der Inhalt des internen Speichers ist die Adresse des spitzen Speichers, die Referenz ist der Alias ​​des Modulspeicher.
2. Sowohl Referenzen als auch Zeiger belegen 4 Byte Speicherplatz im Speicher. Weil sie die Adresse des spitzen Objekts speichern.

Unterschiede:
1. Der Zeiger ist eine Entität und wird an einer anderen Adresse im Speicher gespeichert. Die Referenz ist jedoch nur ein Alias ​​der Variablen, und ihre Adresse ist die Adresse der spitzen Variablen.
2. Wenn Sie die beiden zum Bearbeiten des Originalobjekts verwenden, muss bei Verwendung der Referenz keine Dereferenzierung (*) vorgenommen werden, und der Zeiger muss dereferenziert werden. Die Referenz hat eine schönere Form als der Zeiger und der Name der Referenzvariablen kann direkt verwendet werden, wenn der Inhalt verwendet wird, auf den die Referenz verweist. Anstatt ** wie einen Zeiger zu verwenden, müssen Sie & nicht zum Adressieren wie einen Zeiger verwenden, wenn Sie eine Referenz definieren.
3. Nach der Initialisierung kann nicht auf andere Objekte verwiesen werden, auf Zeiger jedoch.

	int i = 10,j=5;
	int& r = i;
	int* l = &i;
	r = j;//可行,但r所指变量依旧是i,这里只是把j的值赋予了i(r);
	&r = j;//报错
	l = &j;//可行,使l指向了j

4. Verweise sind nicht const, Zeiger sind const und Zeiger, die durch const geändert wurden, können nicht auf andere Objekte verweisen. (Ich werde später über const sprechen.)
5. Referenzen können nicht null sein. Sie müssen initialisiert werden, wenn sie definiert werden. Zeiger können null sein.
6. Die Bedeutung der Verwendung von sizeof für Referenzen und Zeiger ist unterschiedlich. Sizeof (Referenz) erhält das Objekt, das auf das Objekt verweist, auf das verwiesen wird, sizeof (Zeiger) erhält jedoch die Größe des Zeigers selbst.

	char c = '0';
	char& rc = c;
	char* lc = &c;
	cout << sizeof(rc)<< endl;
	cout << sizeof(lc) << endl;
	//结果是1 4

7. Referenz- und Zeiger-Auto-Inkrement (++) haben unterschiedliche Bedeutungen. Die
Betriebsreferenz entspricht dem Betrieb der ursprünglichen Variablen, und ihre Essenz ist die Auto-Inkrement-Operation der ursprünglichen Variablen.
Das automatische Inkrement des Zeigerzeigers bewegt sich jedoch den Zeiger ein Bit nach unten.


Wann Referenzen und wann Zeiger verwendet werden
Es gibt zwei Hauptgründe für die Verwendung von Referenzparametern:

Der Programmierer kann das Datenobjekt in der aufrufenden Funktion ändern.
Durch Übergeben einer Referenz anstelle des gesamten Datenobjekts kann die Laufgeschwindigkeit des Programms verbessert werden.
Allgemeine Prinzipien:

Für Funktionen, die referenzierte Werte ohne Änderung verwenden:

Wenn das Datenobjekt sehr klein ist, z. B. integrierte Datentypen oder kleine Strukturen, übergeben Sie den Wert.
Wenn das Datenobjekt ein Array ist, verwenden Sie einen Zeiger (die einzige Option), und der Zeiger wird als Zeiger auf const deklariert .
Wenn das Datenobjekt eine größere Struktur ist, hat die Verwendung von const Zeigern oder Verweisen , die Effizienz des Programms verbessert. Dies kann Zeit und Platz sparen, die für die Struktur erforderlich sind.
Wenn das Datenobjekt ein Klassenobjekt ist, verwenden Sie eine konstante Referenz (die Standardmethode zum Übergeben von Klassenobjektparametern besteht darin, als Referenz zu übergeben).

Für Funktionen, die die Daten in der Funktion ändern:

Wenn es sich bei den Daten um einen integrierten Datentyp handelt, verwenden Sie einen Zeiger.
Wenn das Datenobjekt ein Array ist, können Sie nur einen Zeiger verwenden.
Wenn das Datenobjekt eine Struktur ist, verwenden Sie eine Referenz oder einen Zeiger.
Wenn die Daten a sind Klassenobjekt, verwenden Sie eine Referenz.

Autor: HawardScut
Quelle: CSDN
Original: https: //blog.csdn.net/hao5335156/article/details/53893714
Copyright: Dieser Artikel ist ein Blogger-Originalartikel, reproduziert, bitte Bowen-Link anhängen!

Ich denke du magst

Origin blog.csdn.net/qq_43530773/article/details/113770351
Empfohlen
Rangfolge