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
Lepaskan: 2024-12-07 06:59:12
asal
235 orang telah melayarinya

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan