Beberapa Pointer Menunjuk ke Satu Alamat Memori

13

C memungkinkan Anda melakukan sesuatu yang mungkin terlihat berantakan pada pandangan pertama. Anda dapat memiliki beberapa petunjuk yang merujuk pada lokasi memori yang sama persis. Ini bukan bug. Itu sebuah fitur.

Pertimbangkan pengaturan ini. Anda mendeklarasikan bilangan bulat i. Kemudian Anda mendeklarasikan tiga pointer: p, q, dan r.

Lihatlah apa yang terjadi di sini. p mengambil alamat i. q melakukan hal yang sama. r tidak peduli dengan i secara langsung. Itu hanya menyalin alamat apa pun yang dipegang p. Karena p menunjuk ke i, r akhirnya menunjuk ke i juga.

Setelah baris ini dijalankan, Anda tidak memiliki tiga variabel terpisah yang beredar. Anda memiliki satu variabel dengan empat alias.

  • saya
  • *p
  • *q
  • *r

Semuanya sama.

Hal ini terjadi karena penetapan penunjuk adalah salinan nilai alamat. Alamat sisi kanan berpindah ke variabel sisi kiri. Tidak ada salinan data yang mendalam yang terjadi. Hanya lokasi memori yang ditransfer.

Tidak ada batasan untuk ini. Anda dapat merangkai pointer sebanyak yang Anda inginkan. a = b; c = b; d = c; Tidak masalah. Semuanya menunjuk ke tempat yang sama di RAM.

Tidak ada batasan jumlah pointer yang dapat ditampung dan oleh karena itu menunjuk ke alamat yang sama.

Mengapa ini penting? Artinya, Anda dapat menyebarkan referensi dengan bebas. Anda dapat menggunakan data alias untuk bagian berbeda dari kode Anda. Anda dapat membuat struktur data yang kompleks di mana node saling mereferensikan.

Ini juga berarti kehati-hatian. Ubah *p menjadi 5. Apa yang terjadi pada i? Ini menjadi 5. Ubah *q? i berubah lagi. Semua alias melihat pembaruan yang sama.

Ini adalah C dasar. Tapi ini kuat. Dan berbahaya jika Anda lupa penunjuk mana yang mana.