Übergeben Sie den Zeiger als Referenz in C +
-
Verwenden der
&var
-Notation zur Übergabe eines Objekts per Referenz -
Verwendung der
*&var
-Notation zur Übergabe eines Zeigers auf ein Objekt per Referenz
Dieser Artikel zeigt verschiedene Methoden zum Übergeben eines Zeigers als Referenz in C++.
Verwenden der &var
-Notation zur Übergabe eines Objekts per Referenz
Im Allgemeinen definiert eine Referenz einen Alias für das Objekt in C++ und muss während der Deklaration initialisiert werden. Die initialisierte Referenz bleibt an das angegebene Objekt gebunden und kann nicht auf ein anderes Objekt zurückgebunden werden. Operationen an den Referenzen ändern die gebundenen Objekte selbst. Daher sind sie eine übliche Methode, um Parameter an Funktionen zu übergeben. Referenzen sind die bevorzugte Methode, da durch ihre Verwendung das implizite Kopieren der Objekte in den Funktionsbereich der Angerufenen vermieden wird. Das nächste Beispiel zeigt die Übergabe eines Objekts std::vector
durch einen Verweis const
auf die Funktion, die die Elemente nach dem angegebenen Wert durchsucht.
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
void findInteger(const vector<int> &arr, int k) {
for (auto &i : arr) {
if (i == k) {
cout << "found - " << k << " in the array" << endl;
return;
}
}
cout << "couldn't find - " << k << " in the array" << endl;
}
int main() {
vector<int> vec = {11, 21, 121, 314, 422, 4, 242};
findInteger(vec, rand() % 100);
return EXIT_SUCCESS;
}
Ausgabe:
couldn t find - 83 in the array
Verwendung der *&var
-Notation zur Übergabe eines Zeigers auf ein Objekt per Referenz
Andererseits können wir die Notation *&var
verwenden, um einen Zeiger unter Bezugnahme auf die Funktion zu übergeben. Ein Zeiger ist ein Objekt selbst. Es kann zugewiesen oder kopiert werden, um einen Verweis auf einen Zeiger als Funktionsparameter zu übergeben. In diesem Fall ist das Symbol &
eine Referenznotation und nicht die Adresse des Operators, mit der der Zeiger auf die Position des Objekts im Speicher abgerufen wird. Beachten Sie, dass auf den Wert des übergebenen Objekts mit dem Standard-Zeiger-Dereferenzierungsoperator - *
zugegriffen werden soll. Der folgende Beispielcode druckt die ASCII-Werte des angegebenen Zeichenkettenobjekts in den Stream cout
.
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
void printASCII(string *&str) {
for (auto &i : *str) {
cout << (int)i << ", ";
}
cout << endl;
}
int main() {
auto str = new string("Arbitrary string");
printASCII(str);
return EXIT_SUCCESS;
}
Ausgabe:
65, 114, 98, 105, 116, 114, 97, 114, 121, 32, 115, 116, 114, 105, 110, 103,
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook