Dalam tutorial ini, kita akan belajar mengenai panggilan C ++ dengan merujuk kepada penunjuk lulus sebagai argumen kepada fungsi dengan bantuan contoh.
Dalam tutorial Fungsi C ++, kami belajar tentang menyampaikan argumen ke fungsi. Kaedah ini digunakan disebut nilai demi nilai kerana nilai sebenarnya dilalui.
Namun, ada cara lain untuk menyampaikan argumen ke fungsi di mana nilai-nilai argumen yang sebenarnya tidak dilalui. Sebaliknya, rujukan kepada nilai diluluskan.
Sebagai contoh,
// function that takes value as parameter void func1(int numVal) ( // code ) // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) ( // code ) int main() ( int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; )
Perhatikan &
di void func2(int &numRef)
. Ini menunjukkan bahawa kami menggunakan alamat pemboleh ubah sebagai parameter kami.
Jadi, apabila kita memanggil func2()
fungsi main()
dengan meneruskan pemboleh ubah num sebagai argumen, kita sebenarnya meneruskan alamat pemboleh ubah num dan bukannya nilai 5 .

Contoh 1: Melewati dengan merujuk tanpa penunjuk
#include using namespace std; // function definition to swap values void swap(int &n1, int &n2) ( int temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )
Pengeluaran
Sebelum menukar a = 1 b = 2 Setelah menukar a = 2 b = 1
Dalam program ini, kami meneruskan pemboleh ubah a dan b ke swap()
fungsi. Perhatikan definisi fungsi,
void swap(int &n1, int &n2)
Di sini, kami menggunakan &
untuk menunjukkan bahawa fungsi tersebut akan menerima alamat sebagai parameternya.
Oleh itu, penyusun dapat mengenal pasti bahawa bukannya nilai sebenar, rujukan pemboleh ubah diteruskan ke parameter fungsi.
Dalam swap()
fungsi tersebut, parameter fungsi n1 dan n2 menunjukkan nilai yang sama dengan pemboleh ubah a dan b masing-masing. Oleh itu pertukaran berlaku berdasarkan nilai sebenar.
Tugas yang sama dapat dilakukan dengan menggunakan pointer. Untuk mengetahui mengenai petunjuk, lawati C ++ Penunjuk.
Contoh 2: Melulus dengan merujuk menggunakan penunjuk
#include using namespace std; // function prototype with pointer as parameters void swap(int*, int*); int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; ) // function definition to swap numbers void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )
Pengeluaran
Sebelum menukar a = 1 b = 2 Setelah menukar a = 2 b = 1
Di sini, kita dapat melihat outputnya sama seperti contoh sebelumnya. Perhatikan garis,
// &a is address of a // &b is address of b swap(&a, &b);
Di sini, alamat pemboleh ubah dihantar semasa panggilan fungsi dan bukannya pemboleh ubah.
Oleh kerana alamat dihantar dan bukan nilai, operator penghapusan *
harus digunakan untuk mengakses nilai yang tersimpan di alamat itu.
temp = *n1; *n1 = *n2; *n2 = temp;
*n1
dan *n2
memberikan nilai yang tersimpan di alamat n1 dan n2 masing-masing.
Oleh kerana n1 dan n2 mengandungi alamat a dan b, apa sahaja yang dilakukan *n1
dan * n2 akan mengubah nilai sebenar a dan b.
Oleh itu, apabila kita mencetak nilai a dan b dalam main()
fungsi, nilainya berubah.