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!