Heim > Backend-Entwicklung > C++ > Speicherzuweisungsmechanismus für C++-Funktionsparameter

Speicherzuweisungsmechanismus für C++-Funktionsparameter

WBOY
Freigeben: 2024-04-21 09:57:01
Original
1251 Leute haben es durchsucht

Der Speicherzuweisungsmechanismus von C++-Funktionsparametern bestimmt, wie die Parameter während des Aufrufs gespeichert werden: Wertübergabe: Parameterkopien werden übergeben und Funktionsänderungen wirken sich nicht auf die Originalvariablen aus. Übergabe als Referenz: Die Parametervariablenadresse wird übergeben und die Funktionsänderung wird in der Originalvariablen widergespiegelt. Übergabe per konstanter Referenz: Ähnlich wie die Übergabe per Referenz, es ist den Funktionen jedoch untersagt, Referenzvariablen zu ändern.

C++ 函数参数的内存分配机制

C++-Speicherzuweisungsmechanismus für Funktionsparameter

In C++ ist der Speicherzuweisungsmechanismus für Funktionsparameter von entscheidender Bedeutung, da er bestimmt, wie Parameter bei Funktionsaufrufen gespeichert und verwendet werden. Wenn Sie die verschiedenen Speicherzuweisungsmechanismen verstehen, können Sie effizienteren und wartbareren Code schreiben.

Wertübergabe

Bei der Wertübergabe wird eine Kopie des Parameters erstellt und an die Funktion übergeben. Dies bedeutet, dass Änderungen innerhalb der Funktion keine Auswirkungen auf die ursprünglichen Variablen des Aufrufers haben.

void foo(int x) {
  x++; // 修改函数内的副本
}

int main() {
  int y = 5;
  foo(y); // 传递 y 的副本
  cout << y; // 输出仍然是 5,因为 y 的原始变量未修改
}
Nach dem Login kopieren

Übergabe per Referenz

Bei der Übergabe per Referenz wird die Adresse der Parametervariablen an die Funktion übergeben. Dies bedeutet, dass alle Änderungen innerhalb der Funktion in den ursprünglichen Variablen des Aufrufers widergespiegelt werden.

void foo(int& x) {
  x++; // 修改函数内引用的原始变量
}

int main() {
  int y = 5;
  foo(y); // 传递 y 的引用
  cout << y; // 输出为 6,因为 y 的原始变量已修改
}
Nach dem Login kopieren

Übergabe per konstanter Referenz

Konstante Referenz ähnelt der Übergabe per Referenz, stellt jedoch sicher, dass alle Änderungen an der Referenzvariablen innerhalb der Funktion ungültig sind.

void foo(const int& x) {
  // 尝试修改函数内引用的原始变量,但编译器会报错
  // x++;
}

int main() {
  int y = 5;
  foo(y); // 传递 y 的常量引用
  cout << y; // 输出仍然是 5,因为 y 的原始变量未修改
}
Nach dem Login kopieren

Praktischer Fall: Array-Sortierung

Stellen Sie sich eine Funktion vor, die ein Array sortieren muss. Wenn Sie die Wertübergabe verwenden, erhält die Funktion eine Kopie des Arrays und etwaige Änderungen an der Kopie wirken sich nicht auf das ursprüngliche Array aus. Wenn Sie andererseits die Referenzübergabe verwenden, kann die Funktion das ursprüngliche Array ändern und das sortierte Ergebnis zurückgeben.

// 按值传递
void sortArray_byValue(int arr[], int size) {
  // 创建数组副本并对其进行排序
  int arr_copy[size];
  for (int i = 0; i < size; i++) {
    arr_copy[i] = arr[i];
  }
  std::sort(arr_copy, arr_copy + size);
}

// 按引用传递
void sortArray_byReference(int arr[], int size) {
  // 直接对原始数组进行排序
  std::sort(arr, arr + size);
}

int main() {
  int arr[] = {5, 2, 8, 3, 1};
  int size = sizeof(arr) / sizeof(arr[0]);

  // 使用按值传递排序
  sortArray_byValue(arr, size);
  for (int i = 0; i < size; i++) {
    cout << arr[i] << " "; // 输出无序数组
  }
  cout << endl;

  // 使用按引用传递排序
  sortArray_byReference(arr, size);
  for (int i = 0; i < size; i++) {
    cout << arr[i] << " "; // 输出已排序的数组
  }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSpeicherzuweisungsmechanismus für C++-Funktionsparameter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage