Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Panggilan demi Nilai Tidak Mengubah Suai Pembolehubah Asal?

Mengapakah Panggilan demi Nilai Tidak Mengubah Suai Pembolehubah Asal?

DDD
DDDasal
2024-11-21 18:43:13786semak imbas

Why Doesn't Call-by-Value Modify the Original Variable?

Nilai Panggilan: Memahami Had

Pertimbangkan contoh panggilan demi nilai ini di mana kami cuba mengubah suai nilai input parameter dalam fungsi:

#include <iostream>
using namespace std;

void changeValue(int value);

int main()
{
  int value = 5;
  changeValue(value);

  cout << "The value is : " << value << "." << endl;

  return 0;
}

void changeValue(int value)
{
  value = 6;
}

Anehnya, output kekal 5 walaupun kami berusaha untuk tukar kepada 6. Tingkah laku ini berpunca daripada prinsip asas panggilan demi nilai dalam C/C .

Intipati Panggilan demi Nilai

Dalam panggilan demi nilai, salinan pembolehubah asal dihantar ke fungsi sebagai hujah. Sebarang pengubahsuaian yang dibuat pada salinan ini dalam fungsi kekal terhad kepada skop setempat tersebut dan tidak menjejaskan pembolehubah asal.

Dalam contoh kami, fungsi changeValue menerima salinan nilai daripada main(). Sebarang perubahan yang dibuat pada salinan ini tidak memberi kesan kepada pembolehubah nilai asal.

Penyelesaian: Pass-by-Reference

Untuk mengubah suai pembolehubah asal dari dalam fungsi, kita mesti menggunakan rujukan lewat. Dalam C/C , ini dilambangkan seperti berikut:

void changeValue(int &amp;value);

Dengan menggunakan & dalam tandatangan fungsi, kami mencipta rujukan (alias) kepada pembolehubah asal. Sebarang perubahan yang dibuat pada rujukan juga mengubah suai pembolehubah asal.

Contoh Laluan-demi-Rujukan

void changeValue(int &amp;value)
{
  value = 6;
}

Sekarang, apabila kita memanggil changeValue dalam main(), rujukan kepada nilai dihantar kepada fungsi, membenarkan ia mengubah suai nilai asal:

int main()
{
  int value = 5;
  changeValue(value);

  cout << "The value is : " << value << "." << endl;

  return 0;
}

Dalam ini senario, output mencerminkan nilai yang diubah suai dengan betul: 6.

Atas ialah kandungan terperinci Mengapakah Panggilan demi Nilai Tidak Mengubah Suai Pembolehubah Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn