C memiliki kekhasan yang membuat pemula tersandung tetapi mendukung sistem yang kompleks. Anda dapat mengarahkan lusinan pointer ke alamat memori yang sama.
Pertimbangkan bilangan bulat sederhana i. Anda dapat mendeklarasikan tiga pointer—p, q, dan r —dan menghubungkan semuanya ke pointer tersebut.
Ini bukan sihir. Itu hanya penyalinan alamat. Saat Anda menulis r = p, kompiler menyalin alamat yang dimiliki oleh p ke r. Hal yang sama terjadi dengan q.
Sekarang i punya empat nama. Itu adalah ‘saya’. Itu adalah *p. Itu adalah *q. Itu adalah *r.
Tidak ada batasan tegas dalam hal ini. Anda dapat memiliki ratusan petunjuk yang merujuk pada potongan RAM yang sama. Masing-masing variabel merupakan variabel berbeda dalam kode Anda, namun semuanya menentukan lokasi yang sama persis di memori.
Inilah sebabnya mengapa perubahan yang dilakukan melalui satu penunjuk akan memengaruhi semua penunjuk lainnya. Ubah *p? Nilai pada alamat tersebut juga berubah untuk q dan r. Ini adalah pandangan langsung ke data yang sama.
Mengapa ini penting? Karena memungkinkan aliasing. Program Anda dapat melihat data yang sama melalui lensa berbeda. Satu penunjuk mungkin memperlakukannya sebagai sebuah struct. Orang lain mungkin memperlakukannya sebagai array byte mentah. Datanya tidak berubah. Penafsirannya memang demikian.
Fleksibilitas ini sangat kuat. Itu juga tempat persembunyian serangga. Jika Anda lupa penunjuk mana yang berada, Anda mungkin akan menimpa data yang tidak Anda inginkan. Namun untuk saat ini, ingatlah: pointer hanyalah alamat. Dan alamat dapat dibagikan.




















