Adakah Mungkin Mempunyai Rujukan Null?
Di alam C , persoalan rujukan nol telah mencetuskan perbincangan. Coretan kod di bawah telah menaikkan kening:
int &nullReference = *(int*)0;
Walaupun pengkompil seperti g dan clang membenarkan kod ini tanpa sebarang amaran, ia menimbulkan persoalan sama ada konsep rujukan nol wujud dalam C .
Menyelami Rujukan lwn. Petunjuk
Ia penting untuk membezakan antara rujukan dan petunjuk dalam C . Tidak seperti penunjuk, yang menyimpan alamat pembolehubah, rujukan ialah ungkapan nilai yang merujuk terus kepada pembolehubah itu sendiri. Pembezaan ini menghapuskan kemungkinan mempunyai rujukan nol.
Definisi Tingkah Laku Tidak Ditakrifkan
Piawaian C secara eksplisit menyatakan bahawa rujukan mesti dimulakan untuk menunjuk kepada objek yang sah. Satu-satunya cara untuk membuat rujukan kepada objek yang tidak wujud adalah dengan menyahrujuk penuding nol, yang ditakrifkan sebagai tingkah laku yang tidak ditentukan. Tingkah laku yang tidak ditentukan bermaksud bahawa pengkompil bebas untuk melakukan apa sahaja, termasuk menjana ralat masa jalan atau mengubah suai pembolehubah program dengan cara yang tidak dijangka.
Implikasi untuk Coretan Kod
Dalam kod yang disediakan, *nullReference ditakrifkan secara teknikal, tetapi ia tidak merujuk kepada objek yang sah. Percubaan untuk mengakses nilai di lokasi ini akan mengakibatkan tingkah laku yang tidak ditentukan. Walau bagaimanapun, anda boleh menyemak sama ada rujukan itu "null" dengan membandingkan alamatnya dengan 0. Jika ia sama, ia menunjukkan percubaan untuk mencipta rujukan null, tetapi tanpa benar-benar membatalkan rujukannya.
Kesimpulan
Dalam program C yang ditakrifkan dengan baik, rujukan nol tidak wujud. Walaupun coretan kod yang disediakan mungkin kelihatan mencadangkan sebaliknya, ia bergantung pada gelagat yang tidak ditentukan dan harus dielakkan. Rujukan menyediakan cara yang selamat dan boleh dipercayai untuk merujuk kepada objek, terima kasih kepada desakan bahasa pada pengikatan awal kepada objek yang sah.
Atas ialah kandungan terperinci Adakah Rujukan Null Wujud dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!