Aritmetik penunjuk ialah alat yang berkuasa dalam pengaturcaraan, membenarkan manipulasi memori yang cekap. Walau bagaimanapun, apabila ia melangkaui sempadan tatasusunan, ia memasuki alam gelagat yang tidak ditentukan.
Dalam contoh yang disediakan, arr tatasusunan integer ditetapkan dengan empat elemen. Penunjuk p kemudian ditetapkan ke titik lima elemen di luar arr, iaitu, arr 5. Operasi ini dibenderakan sebagai kelakuan tidak ditentukan oleh piawai C.
Gerakan di sebalik sekatan ini mungkin tidak kelihatan serta-merta, terutamanya jika penunjuk tidak pernah dinyahrujuk (iaitu, percubaan untuk mengakses memori yang ditunjukkannya). Seseorang mungkin beranggapan bahawa ia sepatutnya berkelakuan seperti operasi integer standard, tetapi ini tidak berlaku.
Inti perkara ini terletak pada fakta bahawa penunjuk dan integer secara semula jadi tidak setara. Walaupun mereka boleh berkongsi ciri yang serupa, seperti dinaikkan, dikurangkan dan dibandingkan, terdapat perbezaan asas. Penunjuk merujuk lokasi memori, manakala integer mewakili nilai berangka.
Piawaian C secara eksplisit mentakrifkan bahawa melebihi had tatasusunan menggunakan aritmetik penunjuk ialah gelagat tidak ditentukan. Ini bermakna bahawa pengkompil tidak mempunyai kewajipan untuk mengendalikan situasi secara konsisten merentas platform yang berbeza atau bahkan pelaksanaan yang berbeza bagi kod yang sama.
Mengapa ini penting? Walaupun tiada dereference eksplisit dilakukan, hasil aritmetik penuding boleh menjejaskan laluan kod lain. Sebagai contoh, jika penuding di luar sempadan digunakan dalam perbandingan penuding atau dihantar sebagai hujah kepada fungsi, ia berpotensi membawa kepada hasil yang tidak dijangka.
Ringkasnya, aritmetik penuding melebihi had tatasusunan dianggap tingkah laku yang tidak ditentukan untuk memastikan tingkah laku penyusun yang konsisten dan melindungi daripada potensi bahaya. Walaupun kelihatan tidak berbahaya untuk menambah satu elemen melepasi penghujung tatasusunan, kesannya mungkin tidak dapat diramalkan dan harus dielakkan.
Atas ialah kandungan terperinci Mengapa Aritmetik Penunjuk Melampaui Sempadan Tatasusunan Dianggap Gelagat Tidak Ditakrifkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!