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
Lepaskan: 2024-12-11 04:48:11
asal
229 orang telah melayarinya

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan