Mengapa Peraturan Aliasing Ketat Membenarkan char* kepada Alias Penunjuk Objek Lain
Peraturan alias yang ketat, seperti yang dinyatakan dalam jawapan yang diterima untuk " Apakah peraturan aliasing yang ketat?", menyatakan bahawa penunjuk jenis berbeza mungkin tidak digunakan untuk mengakses lokasi memori yang sama. Walau bagaimanapun, pengecualian kepada peraturan ini wujud untuk char*.
Pengecualian Aliasing untuk char*
Walaupun peraturan alias yang ketat, ia dibenarkan menggunakan char kepada alias penunjuk mana-mana jenis objek lain. Ini mungkin kerana char boleh mengakses memori di mana-mana alamat dengan butiran bait tunggal. Oleh itu, char* boleh membaca dengan betul bait yang menyusun objek daripada apa-apa jenis lain.
Pengalian Sehala
Pengecualian pengalian untuk char ialah sehala. Ini bermakna walaupun char boleh alias penunjuk bagi mana-mana jenis objek lain, sebaliknya adalah tidak benar. Penunjuk jenis objek lain, seperti struct something, tidak boleh digunakan untuk alias char.
Sebab bagi Asimetri
Sebabnya kerana asimetri ini terletak pada potensi rasuah data. Jika penunjuk jenis objek lain dibenarkan untuk alias char, adalah mungkin untuk membaca bait char menggunakan peraturan penjajaran yang lebih permisif bagi penunjuk objek. Ini boleh membawa kepada tingkah laku yang tidak dapat diramalkan dan tidak betul, kerana bait char* mungkin tidak diselaraskan dengan betul untuk jenis objek.
Contoh
Untuk menggambarkan pengecualian, pertimbangkan contoh berikut:
char* charptr; struct something* structptr; charptr = (char*) structptr; // Allowed structptr = (struct something*) charptr; // Not allowed
Dalam contoh ini, ia dibenarkan untuk menetapkan nilai structptr kepada charptr kerana charptr boleh alias bait struct dengan selamat. Walau bagaimanapun, tugasan yang bertentangan tidak dibenarkan, kerana structptr tidak boleh mengakses bait char* dengan betul dengan peraturan penjajaran yang lebih ketat.
Atas ialah kandungan terperinci Mengapakah char* Alias Penunjuk Objek Lain tetapi Bukan Sebaliknya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!