Ketika kami melewati pointer sebagai parameter ke suatu metode, kami benar -benar memberikan salinan pointer ke metode tersebut, atau kami dapat mengatakan bahwa melewati pointer adalah nilai lewat pointer. Editor saluran teknologi baru kesalahan akan menjelaskan detail perbedaan antara referensi dan pointer di C ++. Datang dan lihatlah!
Penjelasan terperinci tentang perbedaan antara referensi dan penunjuk di C ++
Referensi diperkenalkan dari C ++ dan tidak ada dalam C. Untuk memahami konsep kutipan, Anda harus terlebih dahulu memahami definisi variabel dan perbedaan antara referensi dan variabel. Ada dua elemen variabel: nama dan ruang.
Referensi bukan variabel, itu hanya alias untuk variabel, dan tidak memiliki ruang independen. Ini hanya memenuhi elemen "nama" dari variabel, dan elemen "ruang" tidak terpenuhi. Dengan kata lain, referensi perlu berbagi ruang memori yang sama dengan variabel yang dirujuknya, dan perubahan pada referensi sebenarnya merupakan modifikasi pada variabel yang dirujuk. Dan referensi harus diinisialisasi jika didefinisikan.
Jenis parameter passing dan poin terkait:
1 Lulus berdasarkan Nilai: Nilai parameter formal tidak dapat dimodifikasi. Parameter aktual perlu menginisialisasi parameter formal, dan ruang perlu dialokasikan, dan kemudian menyalin konten parameter aktual ke dalam parameter formal.
2 Reference Pass: Tidak perlu mengalokasikan ruang ketika parameter aktual diinisialisasi.
3 Pointer Passing: Pada dasarnya, masih diteruskan oleh nilai. Ketika parameter aktual diinisialisasi, ruang masih perlu dialokasikan. Jika Anda perlu memodifikasi alamat pointer, cukup melewatkannya dengan pointer tidak dimungkinkan. Anda harus menggunakan ** atau *&
Berikut ini adalah konten yang relevan yang dikutip:
1 Konsep Kutipan
2 Kutipan Const
3 Referensi lewat sebagai parameter
4 Referensi sebagai nilai pengembalian fungsi
5. Perbedaan antara referensi dan penunjuk
1 Konsep Kutipan
Ingatlah poin -poin penting berikut:
(1) Referensi adalah alias untuk variabel, dan tidak ada ruang independen
(2) Referensi perlu dibagikan dengan variabel yang dirujuknya
(3) Perubahan pada referensi sebenarnya adalah perubahan pada variabel yang dirujuknya
(4) Referensi perlu diinisialisasi saat mendefinisikan
(5) Setelah referensi diinisialisasi, variabel lain tidak dapat dibacakan.
Lihat contoh berikut:
int main (void) {int val = 100; // int & refval; <span style = "space putih: pre"> </span> // kesalahan, referensi harus diinisialisasi int & refval = val; cout << "val =" << val << endl; refval = 200; <span style = "spasi putih: pre"> </span> // sebenarnya, variabel val telah diubah cout << "val =" << val << endl; int val2 = 500; refval = val2; <span style = "White-Space: Pre"> </span> // Ini tidak berarti bahwa variabel val2 dirujuk ke val2, // Hanya berarti menetapkan val2 untuk refval, yaitu val. cout << "val =" << val << endl; kembali 0; }2 Kutipan Const
Poin -poin kunci dari kutipan const adalah sebagai berikut:
(1) Sesuai namanya, referensi const adalah referensi ke objek const.
(2) Referensi Const dapat merujuk ke objek non-konstan, tetapi referensi non-konstan tidak dapat merujuk ke objek Const. Lihat contoh fungsi berikut.
int a = 200; const int & ref = a; // ok const int b = 100; int & ref2 = b; //Kesalahan,
(3) Nilai objek yang dirujuk oleh Const adalah konstan dan tidak dapat dimodifikasi.
const int a = 200; const int & ref = a; Ref = 100; // Kesalahan, objek yang direferensikan adalah konstan dan tidak dapat dimodifikasi
(4) Referensi Const dapat merujuk ke variabel dari berbagai jenis, tetapi akan menghasilkan variabel sementara. sebagai berikut:
Ganda A = 3.14; const int & ref = a; // ok, proses yang dihasilkannya adalah: // int tmp = a; Hasilkan TMP variabel sementara, dan data dapat dipotong. // const int & ref = tmp; referensi sebenarnya adalah variabel sementara
3 Referensi lewat sebagai parameter
Melewati referensi sebagai parameter adalah salah satu parameter. Tidak perlu mengalokasikan ruang memori ketika parameter aktual diinisialisasi. Inilah contohnya:
void swap (int & a, int & b) {int tmp = a; a = b; B = TMP; } int main () {int x = 20; int y = 30; swap (x, y); cout << x << endl; // x = 30; cout << y << endl; // y = 20; }4 Referensi sebagai nilai pengembalian fungsi
Daftar pertama contohnya, sebagai berikut:
int a [] = {1,2,3,4,5,6,7,8,9,0}; int & index (int i) {return a [i]; } int main () {index (3) = 100; cout << a [3] << endl; // output: 100}Ini adalah fungsi lain dari referensi, di mana fungsi dapat ditempatkan di sebelah kiri operator penugasan. Fungsi indeks mengembalikan referensi A []. Perubahan pada referensi akan memodifikasi perubahan itu sendiri, sehingga [3] dimodifikasi menjadi 100.
5. Perbedaan antara referensi dan penunjuk
(1) Referensi akses adalah akses langsung, dan akses penunjuk adalah akses tidak langsung.
(2) Referensi adalah alias untuk variabel. Itu tidak mengalokasikan ruang memori sendiri secara terpisah, tetapi pointer memiliki ruang memori sendiri
(3) Setelah referensi diinisialisasi, tidak ada variabel lain yang dapat direferensikan, tetapi penunjuk bisa
(4) Gunakan referensi sebanyak mungkin dan gunakan petunjuk kapan pun Anda harus.
Terima kasih telah membaca dan menjelaskan perbedaan antara referensi dan pointer di C ++ secara detail. Saya harap ini bisa membantu Anda. Terima kasih atas dukungan Anda dari jaringan saluran teknologi baru!