Di C, Anda dapat memiliki banyak penunjuk yang semuanya mengarah ke lokasi memori yang sama persis. Ini bukan bug. Ini adalah sebuah fitur.
Anda dapat mendeklarasikan tiga pointer bilangan bulat: p, q, dan r. Kemudian Anda dapat mengatur semuanya agar menunjuk ke variabel integer i yang sama.
Lihat apa yang terjadi di sini. p mendapatkan alamat i. q juga mendapat alamat i. r mendapatkan apa pun yang dipegang p. Itu adalah alamat i.
Setelah kode ini dijalankan, Anda mengalami situasi yang aneh. i sekarang memiliki empat nama. Anda dapat mengaksesnya menggunakan i, *p, *q, atau *r. Semuanya mengacu pada tempat yang sama di RAM.
Cara Kerja Penugasan Pointer
Saat Anda menetapkan satu penunjuk ke penunjuk lainnya, Anda tidak menyalin nilai yang ditunjuknya. Anda menyalin alamatnya.
r = p tidak menyalin bilangan bulat i. Ini menyalin alamat memori yang disimpan di p. Karena p menyimpan alamat i, r sekarang juga menyimpan alamat i.
Tidak ada batasan berapa banyak pointer yang dapat membagikan satu alamat. Anda bisa mendapatkan sepuluh petunjuk. Atau seratus. Semuanya hanya menunjuk pada hal yang sama.
Mengapa Ini Penting
Perilaku ini mengubah cara Anda berpikir tentang data. Sebuah variabel tunggal dalam memori dapat memiliki banyak alias. Jika Anda mengubah nilai melalui satu penunjuk, setiap penunjuk lainnya akan melihat perubahannya.
Sekarang i adalah 10. *q adalah 10. *r adalah 10. Mereka semua melihat data yang sama.
Ini berguna. Ini memungkinkan Anda meneruskan referensi ke fungsi tanpa menyalin struktur besar. Ini memungkinkan bagian berbeda dari kode Anda beroperasi pada data yang sama. Namun itu juga berarti Anda harus berhati-hati. Mengubah satu penunjuk dapat memengaruhi penunjuk lainnya.
Kesalahpahaman Umum
Beberapa pemula berpikir menugaskan pointer akan menyalin data. Tidak. Itu menyalin alamatnya.
Yang lain bertanya-tanya apakah ada batasannya. Tidak ada satupun. Bahasa ini memungkinkan Anda membuat pointer sebanyak yang Anda butuhkan. Kompiler tidak menghentikan Anda.
Intinya
Beberapa pointer dapat menunjuk ke alamat yang sama. Ini adalah perilaku standar C. Anda dapat menetapkan petunjuk satu sama lain. Alamatnya disalin, bukan nilainya. Variabelnya tetap sama. Nama-namanya bertambah banyak.
“Tidak ada batasan jumlah penunjuk yang dapat menampung (dan karenanya menunjuk ke) alamat yang sama.”
Fleksibilitas ini sangat kuat. Itu membutuhkan disiplin. Tapi ini penting untuk cara kerja C. Jika Anda memahami hal ini, Anda memahami konsep inti manajemen memori di C.


























