Додому Internet & TI Pemrograman Mengapa Beberapa Pointer Dapat Menargetkan Satu Variabel di C

Mengapa Beberapa Pointer Dapat Menargetkan Satu Variabel di C

4

C memungkinkan Anda membuat kekacauan atau kejelasan dengan petunjuk. Itu tergantung bagaimana Anda melihatnya. Bahasa ini memungkinkan sejumlah pointer menunjuk ke alamat memori yang sama persis. Ini bukan bug. Itu sebuah fitur.

Ambil i. Deklarasikan p, q, dan r sebagai pointer bilangan bulat. Arahkan semuanya ke i. Kodenya terlihat seperti ini:

Cukup sederhana. Tapi apa yang terjadi di balik terpal?

Petunjuk Hanya Alamat

Pada contoh di atas, r tidak menunjuk ke p. Ini menunjuk ke apa yang p tunjukkan. Yaitu i.

Saat Anda menetapkan satu penunjuk ke penunjuk lainnya, alamatnya akan disalin. Nilai sisi kanan berpindah ke variabel sisi kiri. Setelah eksekusi, i memiliki empat nama. ‘saya’. *p. *q. *r.

Semuanya adalah label berbeda untuk potongan RAM yang sama. Anda dapat membuat pointer sebanyak yang Anda inginkan. Batasannya adalah ingatan Anda, bukan bahasanya.

Mengapa Ini Penting

Perilaku ini mengubah cara Anda mengelola data. Jika Anda meneruskan pointer ke suatu fungsi, perubahan apa pun yang dilakukan melalui pointer tersebut akan memengaruhi variabel asli. Jika beberapa fungsi menyimpan pointer ke alamat yang sama, semuanya akan melihat perubahan yang sama.

Ini menciptakan keadaan bersama. Berguna untuk menyimpan cache. Berbahaya jika Anda lupa siapa yang menulis di mana.

Tidak ada batasan jumlah pointer yang dapat menampung dan menunjuk ke alamat yang sama.

Fleksibilitas ini sangat kuat. Ini juga rumit. Satu penunjuk mengubah nilainya. Semua orang lain langsung melihatnya. Tidak diperlukan sinkronisasi. Hanya akses memori mentah.

Pikirkan tentang debugging. Jika suatu variabel berubah secara tidak terduga, periksa semua petunjuk. Salah satu dari mereka bisa menjadi pelakunya. Mereka semua mempunyai kekuatan yang sama. Dan tanggung jawab yang sama.

Ini bukanlah logika yang rumit. Ini adalah aritmatika penunjuk sederhana. Namun dampaknya akan mempengaruhi seluruh program Anda. Satu alamat. Banyak nama. Semua terhubung.