Mengapakah Panggilan demi Nilai Tidak Mengubah Suai Pembolehubah Asal?

DDD
Lepaskan: 2024-11-21 18:43:13
asal
784 orang telah melayarinya

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;
}
Salin selepas log masuk

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);
Salin selepas log masuk

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;
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan