Rumah >pembangunan bahagian belakang >C++ >Adakah Penyahrujukan Penunjuk NULL untuk Mendapatkan Kelakuan Ditakrifkan Rujukan dalam C?

Adakah Penyahrujukan Penunjuk NULL untuk Mendapatkan Kelakuan Ditakrifkan Rujukan dalam C?

DDD
DDDasal
2024-12-07 06:59:12241semak imbas

Is Dereferencing a NULL Pointer to Obtain a Reference Defined Behavior in C  ?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn