Menujuk Penunjuk Tidak Dimulakan: Perjalanan ke Tingkah Laku Tidak Ditakrifkan
Mentakrifkan penuding tidak dimulakan sebagai tingkah laku tidak ditentukan dalam piawaian C memerlukan pemahaman yang menyeluruh tentang semantik bahasa. Walaupun pengenalpastian tingkah laku tidak ditentukan (UB) tidak mudah dilihat dalam bahagian piawai yang disebut, penerokaan yang lebih mendalam mendedahkan rasional asas.
Bahagian 4.1 piawaian C mentakrifkan penukaran nilai (seperti penunjuk) kepada rnilai (ungkapan yang boleh dinilai kepada nilai). Penukaran ini dibenarkan untuk jenis bukan fungsi, bukan tatasusunan, dengan syarat nilai l merujuk kepada objek yang dimulakan daripada jenis yang ditentukan atau jenis terbitannya. Walau bagaimanapun, jika lvalue merujuk objek yang tidak dimulakan atau tidak sah, penukaran akan menghasilkan gelagat yang tidak ditentukan.
Dalam coretan kod yang disediakan:
int* ptr; *ptr = 0;
Ptr penunjuk diisytiharkan tetapi tidak dimulakan, menjadikan ia objek yang tidak dimulakan. Percubaan seterusnya untuk menyahrujuk penunjuk ini (*ptr) membentuk penukaran lnilai kepada nilai, melanggar syarat yang dinyatakan dalam Bahagian 4.1. Memandangkan penukaran melibatkan objek yang tidak dimulakan, tingkah laku itu dianggap tidak ditentukan.
Atas ialah kandungan terperinci Mengapakah Penyahrujukan Penunjuk Tidak Dimulakan Kelakuan Tidak Ditakrifkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!