Menujuk NULL Penunjuk untuk Rujukan: Tafsiran dan Standard
Dalam C , kod berikut menimbulkan persoalan tentang perkara yang ditentukan oleh standard:
int* ptr = NULL; int& ref = *ptr; int* ptr2 = &ref;
Secara khusus, adakah dibenarkan untuk menolak rujukan penunjuk NULL kepada dapatkan rujukan, dan apakah hasil daripada operasi sedemikian?
Tafsiran Standard
Menurut piawaian C, membatalkan rujukan penunjuk NULL dianggap kelakuan tidak ditentukan. Ini dinyatakan secara eksplisit dalam bahagian 8.3.2/4 standard:
Nota: khususnya, rujukan nol tidak boleh wujud dalam program yang jelas, kerana satu-satunya cara untuk mencipta rujukan sedemikian adalah dengan ikatkannya pada "objek" yang diperoleh dengan membatalkan rujukan penunjuk nol, yang menyebabkan kelakuan tidak ditentukan.
Pelaksanaan Implikasi
Walau bagaimanapun, dalam amalan, banyak penyusun melaksanakan tingkah laku ini sebagai menetapkan keputusan kepada NULL. Ini bermakna ptr2 dalam coretan kod yang disediakan akan diberikan nilai NULL.
Tafsiran Pengkompil
Adalah penting untuk ambil perhatian bahawa tingkah laku yang diterangkan di atas tidak dijamin oleh standard dan mungkin berbeza merentasi penyusun dan platform yang berbeza. Contohnya, sesetengah penyusun mungkin menimbulkan pengecualian atau melakukan tindakan khusus platform lain apabila membatalkan rujukan penunjuk NULL.
Pengecualian Khusus
Satu pengecualian kepada peraturan ini ialah penggunaan daripada saiz operator pada penunjuk NULL. Dalam konteks ini, dereference sebenarnya tidak berlaku dan sizeof boleh digunakan untuk menentukan saiz jenis tanpa menyebabkan tingkah laku yang tidak ditentukan.
Atas ialah kandungan terperinci Adakah Penyahrujukan Penunjuk NULL untuk Mendapatkan Kelakuan Ditakrifkan Rujukan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!