Rumah >pembangunan bahagian belakang >C++ >Bolehkah Menyahrujuk Penunjuk NULL untuk Mendapatkan Rujukan Ditakrifkan dengan Baik dalam C?

Bolehkah Menyahrujuk Penunjuk NULL untuk Mendapatkan Rujukan Ditakrifkan dengan Baik dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-12-11 04:48:11223semak imbas

Can Dereferencing a NULL Pointer to Get a Reference Be Well-Defined in C  ?

Bolehkah Anda Menyahrujuk Penunjuk NULL untuk Memperoleh Rujukan?

Piawaian C mentakrifkan penyahrujukan penunjuk NULL sebagai tingkah laku yang tidak ditentukan. Walau bagaimanapun, coretan kod yang melibatkan penyahrujukan penuding NULL untuk mendapatkan rujukan, seperti berikut, menimbulkan persoalan:

int* ptr = NULL;
int& ref = *ptr;
int* ptr2 = &ref;

Definisi Standard:

Mengikut piawaian C (8.3.2/4 "Rujukan"), rujukan nol tidak boleh wujud dalam program yang ditakrifkan dengan baik. Ini kerana membuat rujukan sedemikian memerlukan pengikatannya pada "objek" yang diperolehi dengan membatalkan penuding nol, yang membentuk tingkah laku yang tidak ditentukan.

Perincian Pelaksanaan atau Ditakrifkan dengan Baik?

Dalam amalan, coretan kod memberikan keputusan dalam ptr2 ditetapkan kepada NULL. Walau bagaimanapun, ini hanyalah butiran pelaksanaan. Piawaian secara eksplisit menyatakan bahawa penyahrujukan penuding nol tidak ditentukan.

Kesan Penyahrujukan Penunjuk NULL:

Secara umum, penyahrujukan penuding nol membawa kepada ranap sistem. Dalam kes khusus menggunakannya untuk mendapatkan rujukan, pengkompil melaksanakan rujukan sebagai penunjuk, menghapuskan operasi penyahrujukan sebenar. Namun begitu, gelagat asas yang tidak ditakrifkan kekal.

Pengecualian: Saiz Operator

Pengecualian untuk membatalkan rujukan penunjuk nol dengan cara yang ditakrifkan dengan baik ialah saiz operator. Apabila menggunakan sizeof, operan tidak dinilai, mengelakkan operasi penyahrujukan.

Atas ialah kandungan terperinci Bolehkah Menyahrujuk Penunjuk NULL untuk Mendapatkan Rujukan Ditakrifkan dengan Baik 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