Perbezaan antara penunjuk dan rujukan
- 685
- 80
- Gilbert Schumm
Kedua -dua petunjuk dan rujukan adalah ciri yang paling kuat dalam c dan c ++ yang membolehkan pengaturcara memanipulasi alamat memori secara langsung untuk pengurusan ingatan yang cekap.
Kedua -duanya adalah pembolehubah yang digunakan untuk merujuk kepada objek lain secara tidak langsung dan mereka berkongsi beberapa ciri umum di permukaan. Walaupun mereka berkongsi banyak keupayaan biasa, mereka juga sangat kompleks untuk difahami.
Penunjuk adalah pemboleh ubah yang memegang alamat memori pembolehubah lain, sedangkan rujukan adalah seperti penunjuk yang boleh digunakan untuk secara tidak langsung merujuk kepada pemboleh ubah lain.
Kebanyakan pengaturcara seolah -olah mengembangkan pemahaman tentang bila menggunakan petunjuk dan bila menggunakan rujukan, tetapi mereka sering menemui masalah penyelesaian yang nampaknya tidak jelas.
Oleh itu, untuk lebih memahami falsafah, mari kita fahami perbezaan antara kedua -duanya.
Apa itu penunjuk?
Setiap pemboleh ubah adalah lokasi memori yang ditakrifkan oleh alamatnya dan dipasangkan dengan pengenal yang mengandungi beberapa nilai yang boleh diubah semasa program. Secara ringkas, pembolehubah adalah simbol yang mewakili kuantiti.
Penunjuk adalah pemboleh ubah yang mengandungi alamat memori pembolehubah lain. Penunjuk hanyalah alamat dan pembolehubah yang menyimpan penunjuk dipanggil pembolehubah penunjuk.
Ideanya adalah menggunakan pengenal (atau nama) dan bukannya alamat angka untuk meringankan beban pengaturcaraan dengan itu mengurangkan kerumitan program. Oleh kerana alamat ini merujuk kepada lokasi sebenar dalam memori komputer, petunjuk boleh digunakan untuk mengakses dan memanipulasi kandungan yang disimpan dalam ingatan.
Seperti mana -mana pemboleh ubah atau malar, petunjuk mesti diisytiharkan untuk jenis mereka. Oleh kerana petunjuk mengandungi alamat memori yang tergolong dalam jenis data yang berasingan, mereka mesti diisytiharkan menggunakan petunjuk sebelum anda dapat bekerja dengan mereka. Bentuk umum perisytiharan penunjuk adalah:
Data_type * var-name;
Di sini, "Data_Type" adalah jenis asas penunjuk dan "var-nama" adalah pemboleh ubah penunjuk. Asterisk (*) di sini digunakan untuk mengisytiharkan penunjuk yang menunjuk pemboleh ubah "var-name" sebagai pemboleh ubah penunjuk.
int *p; // penunjuk integer
terapung *x; // penunjuk terapung
Di sini, pembolehubah "P" menunjuk kepada jenis data integer yang diisytiharkan sebagai "int" yang merujuk kepada jenis data pembolehubah. Begitu juga, dalam contoh kedua, "terapung" merujuk kepada jenis data pembolehubah "x" yang sebenarnya ditetapkan sebagai penunjuk kepada pemboleh ubah terapung.
Apa itu rujukan?
Rujukan adalah seperti penunjuk dengan akses tidak langsung kepada pemboleh ubah. Ia seperti alias untuk pemboleh ubah lain, yang bermaksud ia hanya nama lain untuk pemboleh ubah yang sudah ada.
Ia membolehkan pengaturcara membuat nama kedua untuk pembolehubah yang dapat mereka gunakan untuk memanipulasi kandungan yang disimpan dalam pembolehubah itu. Ini entiti yang merupakan alias untuk pemboleh ubah lain dan ia mempunyai alamat yang sama dengan pemboleh ubah asal. Ia menyokong tindakan lulus-demi-rujukan sebagai parameter formal fungsi dan sebaik sahaja ia ditakrifkan untuk merujuk kepada pembolehubah, ia tidak dapat disusun semula yang bermaksud ia tidak dapat dirujuk kepada pemboleh ubah lain.
Tidak seperti petunjuk, mereka tidak memerlukan pengendali dereferencing untuk mengakses nilai; Malah, mereka boleh digunakan seperti pembolehubah biasa.
int i;
int & ri = i;
Di sini, "RI" adalah rujukan integer yang dimulakan untuk "i". Ia mengisytiharkan "RI" sebagai objek jenis "Rujukan kepada Int". Rujukan boleh dikelirukan dengan mudah dengan penunjuk yang merupakan pemboleh ubah bebas, nilai alamat yang tidak dapat ditugaskan setelah dibuat.
Perbezaan antara penunjuk dan rujukan
-
Asas penunjuk dan rujukan
- Kedua -duanya memberikan keupayaan hampir serupa dari segi kebolehgunaan dan perbezaannya boleh menjadi rumit. Penunjuk hanyalah pemboleh ubah yang menyimpan alamat memori pembolehubah lain, sedangkan rujukan adalah seperti alias untuk pembolehubah yang sudah ada. Ia mewujudkan nama kedua untuk pemboleh ubah yang boleh digunakan untuk mengubah suai kandungan yang disimpan dalam pembolehubah itu.
-
Pengisytiharan penunjuk dan rujukan
- Penunjuk adalah seperti pembolehubah lain yang menyimpan sekeping data. Tidak seperti pembolehubah lain, pembolehubah penunjuk menyimpan alamat memori dan bukannya nilai. Penunjuk ditakrifkan menggunakan pengendali indirection * untuk mengakses lokasi memori pembolehubah yang ditunjuk ke. Rujukan, sebaliknya, tidak memerlukan pengendali dereferencing untuk mengakses nilai.
-
Penugasan semula penunjuk dan rujukan
- Tidak seperti petunjuk yang boleh dimulakan pada bila -bila masa, rujukan mesti diberikan pada permulaan. Petunjuk boleh diakses secara langsung, sedangkan rujukan tidak dapat diakses secara langsung.
-
Alamat memori untuk penunjuk dan rujukan
- Pemboleh ubah penunjuk mempunyai lokasi tersendiri dalam ingatan, yang bermaksud apabila anda mengisytiharkan penunjuk, anda menentukan lokasi yang merupakan alamat memori yang diberikan kepada setiap unit memori. Pemboleh ubah penunjuk mempunyai alamat yang sama di mana ia disimpan dalam ingatan. Pembolehubah rujukan, sebaliknya, adalah alias untuk pembolehubah lain dengan itu mengambil alamat pembolehubah rujukan.
-
Nilai null untuk penunjuk dan rujukan
- Null mewakili akhir senarai yang bermaksud ia menunjukkan nilai tidak diketahui dan ia menentukan bahawa pembolehubah tidak mempunyai ruang alamat yang sah. Nilai null boleh diberikan kepada pemboleh ubah penunjuk secara langsung yang mencadangkan ia tidak menunjuk di mana -mana sahaja, sedangkan null tidak dapat diberikan kepada pemboleh ubah rujukan.
Penunjuk vs. Rujukan: Carta Perbandingan
Ringkasan penunjuk vs. Rujukan
Pointers selalu menjadi antara topik kegemaran perbincangan pengaturcara C/C ++ sehingga rujukan datang ke gambar. Rujukan agak serupa dengan petunjuk tetapi mempunyai bahagian yang saksama dari kebaikan dan keburukan mereka berbanding. Walaupun kedua -duanya boleh digunakan untuk mengubah pembolehubah tempatan satu fungsi dalam fungsi lain, mereka mempunyai perbezaan mereka. Kedua -duanya adalah ciri yang kuat dalam C dan C ++ yang membolehkan anda memanipulasi memori secara langsung, tetapi dengan beberapa pengecualian. Penunjuk memegang alamat memori pembolehubah, sedangkan rujukan hanyalah alias untuk pemboleh ubah lain.