Memahami Persamaan Alamat Tatasusunan dan Penunjuk Ditukar
Dalam bahasa pengaturcaraan C, adalah amalan biasa untuk menukar tatasusunan kepada penunjuk kepada elemen pertamanya menggunakan penukaran tatasusunan ke penuding. Ini menimbulkan persoalan mengapa alamat tatasusunan adalah sama dengan alamat penuding yang ditukar.
Untuk menggambarkan konsep ini, mari kita pertimbangkan kod berikut:
int t[10]; int *u = t; cout << t << " " << &t << endl; cout << u << " " << &u << endl;
Output kod ini menunjukkan kesetaraan alamat tatasusunan dan alamat penuding yang ditukar:
0045FB88 0045FB88 0045FB88 0045FB7C
Untuk memahami fenomena ini, kita perlu mengenali dua makna berbeza yang dikaitkan dengan simbol t:
Dalam kod kami, baris pertama output memaparkan alamat t (tatasusunan) dan alamat &t ( penunjuk kepada tatasusunan). Memandangkan tatasusunan ialah blok memori bersebelahan, alamat permulaannya adalah sama.
Barisan kedua output menunjukkan alamat u (penunjuk yang ditukar kepada elemen pertama) dan alamat &u (penunjuk kepada yang ditukar penunjuk). Sekali lagi, alamat ini adalah sama kerana u pada asasnya bersamaan dengan &t[0].
Oleh itu, kami membuat kesimpulan bahawa sebab alamat tatasusunan adalah sama dengan alamat tatasusunan yang ditukar kepada penunjuk ialah kerana kedua-duanya mewakili alamat permulaan bagi blok memori bersebelahan yang diduduki oleh tatasusunan. Kesetaraan ini berlaku kerana penukaran tatasusunan ke penuding menghasilkan penuding kepada elemen pertama tatasusunan, yang mempunyai lokasi memori yang sama dengan permulaan keseluruhan tatasusunan.
Atas ialah kandungan terperinci Mengapakah alamat tatasusunan dalam C bersamaan dengan alamat penuding kepada elemen pertamanya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!