Panggilan C ++ dengan Referensi: Menggunakan pointer (Dengan Contoh)

Dalam tutorial ini, kita akan belajar tentang panggilan C ++ dengan referensi untuk meneruskan pointer sebagai argumen ke fungsi dengan bantuan contoh.

Dalam tutorial C ++ Functions, kita belajar tentang meneruskan argumen ke suatu fungsi. Metode yang digunakan ini disebut passing by value karena nilai sebenarnya dilewatkan.

Namun, ada cara lain untuk meneruskan argumen ke fungsi yang nilai argumen sebenarnya tidak diteruskan. Sebaliknya, referensi ke nilai diteruskan.

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 bahwa kami menggunakan alamat variabel sebagai parameter kami.

Jadi, ketika kita memanggil func2()fungsi in main()dengan meneruskan variabel num sebagai argumen, kita sebenarnya mengirimkan alamat variabel num alih-alih nilai 5 .

C ++ Pass by Value vs. Pass by Reference

Contoh 1: Melewati referensi tanpa petunjuk

 #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; )

Keluaran

 Sebelum menukar a = 1 b = 2 Setelah menukar a = 2 b = 1

Dalam program ini, kami mengirimkan variabel a dan b ke swap()fungsi. Perhatikan definisi fungsinya,

 void swap(int &n1, int &n2)

Di sini, kami menggunakan &untuk menunjukkan bahwa fungsi tersebut akan menerima alamat sebagai parameternya.

Oleh karena itu, kompilator dapat mengidentifikasi bahwa alih-alih nilai aktual, referensi variabel diteruskan ke parameter fungsi.

Dalam swap()fungsinya, parameter fungsi n1 dan n2 menunjuk ke nilai yang sama dengan variabel a dan b masing-masing. Karenanya pertukaran terjadi pada nilai aktual.

Tugas yang sama bisa dilakukan dengan menggunakan pointer. Untuk mempelajari tentang pointer, kunjungi C ++ Pointers.

Contoh 2: Melewati referensi menggunakan pointer

 #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; )

Keluaran

 Sebelum menukar a = 1 b = 2 Setelah menukar a = 2 b = 1

Di sini, kita bisa melihat keluarannya sama dengan contoh sebelumnya. Perhatikan garisnya,

 // &a is address of a // &b is address of b swap(&a, &b);

Di sini, alamat variabel diteruskan selama pemanggilan fungsi daripada variabel.

Karena alamat dikirimkan alih-alih nilai, operator dereferensi *harus digunakan untuk mengakses nilai yang disimpan di alamat itu.

 temp = *n1; *n1 = *n2; *n2 = temp; 

*n1dan *n2memberikan nilai yang disimpan di alamat n1 dan n2 masing-masing.

Karena n1 dan n2 berisi alamat a dan b, semua hal dilakukan *n1dan * n2 akan mengubah nilai sebenarnya dari a dan b.

Oleh karena itu, ketika kita mencetak nilai a dan b dalam main()fungsi tersebut, nilainya berubah.

Artikel yang menarik...