C ++ Panggilan Melalui Alamat dan Panggilan Melalui Rujukan

C Call Address



C ++ adalah bahasa pengaturcaraan tujuan umum yang fleksibel. Ia pada asalnya dicipta oleh Bjarne Stroustrup, seorang saintis komputer Denmark, pada tahun 1985. C ++ menyokong kaedah melewati tiga parameter, iaitu panggilan demi nilai, panggilan demi alamat, dan panggilan dengan rujukan. Dalam artikel ini, kita akan membincangkan mengenai mekanisme panggilan demi alamat dan panggilan melalui panggilan.

Apa itu fungsi?

Sebelum kita masuk ke topik sebenar, kita perlu memahami apa fungsi dalam C ++. Ramai di antara anda mungkin sudah biasa dengan fungsi.







Fungsi pada dasarnya adalah sekeping kod yang dapat digunakan untuk melakukan tugas tertentu. Fungsi terutamanya digunakan untuk mengurangkan kod berulang dalam program C ++. Ia memerlukan input sebagai parameter dan mengembalikan output sebagai nilai kembali. Sekiranya kita menentukan fungsi sekali, kita boleh memanggil / menggunakannya berulang kali di bahagian akhir program kita. Dengan cara itu, kami menyimpan banyak kod berulang dalam program ini.



Setiap program C ++ mesti mempunyai fungsi () utama. Fungsi utama () adalah titik masuk untuk program C ++. Terlepas dari fungsi utama (), pengaturcara dapat menentukan seberapa banyak fungsi yang mereka inginkan.



Berikut adalah sintaks menentukan fungsi:





Return_type Function_Name(Senarai parameter input)

Fungsi dalam C ++ dapat menerima 0 atau lebih parameter input, sedangkan hanya dapat mengembalikan satu nilai kembali.

Apa itu Alamat?

Terdapat dua jenis pemboleh ubah dalam C ++ (serupa dengan bahasa C) - Pemboleh ubah Data dan Pembolehubah Alamat. Pemboleh ubah alamat digunakan untuk menyimpan alamat pemboleh ubah data lain. Sebagai contoh, mari kita pertimbangkan coretan kod berikut:



inti= 100;
int *ptr= &i;

Di sini, pernyataan pertama memberitahu kita bahawa pemboleh ubah i adalah pemboleh ubah data, dan menyimpan nilai 100. Dalam pernyataan kedua, kita menyatakan pemboleh ubah penunjuk, iaitu ptr, dan menginisialisasi dengan alamat pemboleh ubah i.

Apa itu Rujukan?

Rujukannya adalah satu lagi ciri kuat bahasa C ++. Mari pertimbangkan coretan kod berikut:

intke= 200;
int &r=ke;

Dalam contoh ini, kita telah menyatakan bilangan bulat, iaitu a dan kemudian menyatakan pemboleh ubah rujukan, yang diinisialisasi dengan nilai a. Jadi, pemboleh ubah rujukan tidak lain hanyalah alias pemboleh ubah lain.

Kaedah lulus parameter:

Terdapat tiga jenis kaedah lulus parameter dalam bahasa C ++:

  1. Panggilan mengikut nilai / Lulus mengikut nilai
  2. Panggilan melalui alamat / Lulus dengan alamat
  3. Panggilan melalui rujukan / Lulus dengan rujukan

Dalam artikel ini, kita membincangkan mengenai - Panggilan berdasarkan alamat dan Panggilan dengan rujukan.

Apa itu Alamat Panggilan / Alamat Lewat?

Sekiranya kaedah Call by address / Pass by address, argumen fungsi diteruskan sebagai alamat. Fungsi pemanggil melewati alamat parameter. Pemboleh ubah penunjuk digunakan dalam definisi fungsi. Dengan bantuan kaedah Call by address, fungsi dapat mengakses parameter sebenar dan mengubahnya. Kami akan melihat contoh kaedah Panggilan melalui alamat kemudian di artikel ini.

Apa itu Panggilan Melalui Rujukan / Lulus dengan rujukan?

Dalam kaedah Call by referensi / Pass by referensi, parameter fungsi diteruskan sebagai rujukan. Di dalam definisi fungsi, parameter sebenar diakses menggunakan pemboleh ubah rujukan.

Contoh:

Sekarang, kerana kita memahami konsep kaedah melewati parameter, kita akan melihat beberapa contoh program untuk memahami mekanisme lulus parameter dalam C ++:

  1. Contoh-1 - Panggilan Melalui Alamat (1)
  2. Contoh-2 - Panggilan Melalui Alamat (2)
  3. Contoh-3 - Panggilan dengan Rujukan (1)
  4. Contoh-4 - Panggilan dengan Rujukan (2)

Dua contoh pertama diberikan untuk menjelaskan bagaimana kaedah Call by address berfungsi di C ++. Dua contoh terakhir adalah menerangkan konsep Call by referensi.

Contoh-1 - Panggilan Melalui Alamat (1)

Dalam contoh ini, kita akan menunjukkan mekanisme panggilan melalui alamat. Dari fungsi utama (), kami memanggil fungsi hello () dan meneruskan alamat var. Dalam definisi fungsi, kami menerima alamat var dalam pemboleh ubah penunjuk, iaitu, p. Di dalam fungsi halo, nilai var diubah menjadi 200 dengan bantuan penunjuk. Oleh itu, nilai var semakin berubah menjadi 200 di dalam fungsi utama () selepas panggilan fungsi hello ().

#sertakan
menggunakan ruang namaJam;

batalhello(int *hlm)
{
kos <<endl<< Fungsi 'Hello inside ():' <<endl;
kos << 'Nilai * p =' << *hlm<<endl;
*hlm= 200;
kos << 'Nilai * p =' << *hlm<<endl;
kos << 'Keluar dari fungsi hello ().' <<endl;
}

intutama()
{
intdi mana= 100;
kos << 'Nilai var di dalam main () function =' <<di mana<<endl;

hello(&di mana);

kos <<endl<< 'Nilai var di dalam main () function =' <<di mana<<endl;

kembali 0;
}

Contoh-2 - Panggilan Melalui Alamat (2)

Ini adalah contoh lain kaedah panggilan melalui alamat. Dalam contoh ini, kita akan menerangkan bagaimana kaedah panggilan melalui alamat dapat digunakan untuk menyelesaikan masalah kehidupan nyata. Sebagai contoh, kami ingin menulis fungsi untuk menukar dua pemboleh ubah. Sekiranya kita menggunakan mekanisme panggilan demi nilai untuk menukar dua pemboleh ubah, pemboleh ubah sebenarnya tidak akan bertukar dalam fungsi pemanggil. Kaedah panggilan melalui alamat dapat digunakan dalam senario seperti itu. Dalam contoh ini, kami meneruskan alamat kedua-dua var_1 (& var_1) dan var_2 (& var_2) ke fungsi mySwap (). Di dalam fungsi mySwap (), kami menukar nilai dua pemboleh ubah ini dengan bantuan pointer. Seperti yang anda lihat di output di bawah, nilai sebenar pemboleh ubah ini ditukar dalam fungsi utama () setelah fungsi mySwap () dijalankan.

#sertakan
menggunakan ruang namaJam;

batalpertukaran saya(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

intutama()
{
intvar_1= 100;
intvar_2= 300;

kos << 'Sebelum memanggil fungsi mySwap (), nilai var_1:' <<var_1<<endl;
kos << 'Sebelum memanggil fungsi mySwap (), nilai var_2:' <<var_2<<endl<<endl;

kos << 'Memanggil fungsi mySwap () - Panggilan mengikut alamat.' <<endl<<endl;
pertukaran saya(&var_1,&var_2);

kos << 'Setelah memanggil fungsi mySwap (), nilai var_1:' <<var_1<<endl;
kos << 'Setelah memanggil fungsi mySwap (), nilai var_2:' <<var_2<<endl;

kembali 0;
}

Contoh-3 - Panggilan dengan Rujukan (1)

Dalam contoh ini, kita akan menunjukkan bagaimana panggilan melalui rujukan berfungsi di C ++. Dalam definisi fungsi hello (), nilainya diterima sebagai pemboleh ubah rujukan (& p). Dengan bantuan pemboleh ubah rujukan (iaitu, p), kita dapat mengubah nilai parameter sebenar (var) di dalam fungsi utama ().

#sertakan
menggunakan ruang namaJam;

batalhello(int &hlm)
{
kos <<endl<< Fungsi 'Hello inside ():' <<endl;
kos << 'Nilai p =' <<hlm<<endl;
hlm= 200;
kos << 'Nilai p =' <<hlm<<endl;
kos << 'Keluar dari fungsi hello ().' <<endl;
}

intutama()
{
intdi mana= 100;
kos << 'Nilai var di dalam main () function =' <<di mana<<endl;

hello(di mana);

kos <<endl<< 'Nilai var di dalam main () function =' <<di mana<<endl;

kembali 0;
}

Contoh-4 - Panggilan dengan Rujukan (2)

Ini adalah contoh lain panggilan melalui rujukan. Dalam contoh ini, kita akan menunjukkan bagaimana panggilan melalui rujukan berfungsi di C ++ dengan bantuan contoh dunia nyata. Fungsi mySwap () dipanggil dari fungsi utama () dengan parameter berikut - var_1 dan var_2. Di dalam fungsi mySwap (), kami menerima parameter sebagai pemboleh ubah rujukan.

#sertakan
menggunakan ruang namaJam;

batalpertukaran saya(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

intutama()
{
intvar_1= 100;
intvar_2= 300;

kos << 'Sebelum memanggil fungsi mySwap (), nilai var_1:' <<var_1<<endl;
kos << 'Sebelum memanggil fungsi mySwap (), nilai var_2:' <<var_2<<endl<<endl;

kos << 'Memanggil fungsi mySwap () - Panggil dengan rujukan.' <<endl<<endl;
pertukaran saya(var_1, var_2);

kos << 'Setelah memanggil fungsi mySwap (), nilai var_1:' <<var_1<<endl;
kos << 'Setelah memanggil fungsi mySwap (), nilai var_2:' <<var_2<<endl;

kembali 0;
}

Kesimpulannya

Memahami kaedah lulus parameter dalam C ++ sangat penting. Bahasa pengaturcaraan C menyokong Call by value dan Call by address sahaja. Tetapi, C ++ menyokong Call dengan rujukan bersama dua mekanisme sebelumnya. Dalam artikel ini, kami telah melihat beberapa contoh kerja untuk memahami konsep Call by address dan Call by referensi. Panggilan melalui alamat adalah kaedah yang sangat kuat dan popular dalam aplikasi domain terbenam.