Mengapakah alamat tatasusunan dalam C bersamaan dengan alamat penuding kepada elemen pertamanya?

DDD
Lepaskan: 2024-11-22 08:08:10
asal
186 orang telah melayarinya

Why is the address of an array in C equivalent to the address of a pointer to its first element?

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

Output kod ini menunjukkan kesetaraan alamat tatasusunan dan alamat penuding yang ditukar:

0045FB88 0045FB88
0045FB88 0045FB7C
Salin selepas log masuk

Untuk memahami fenomena ini, kita perlu mengenali dua makna berbeza yang dikaitkan dengan simbol t:

  • Ungkapan tatasusunan: Apabila digunakan bersendirian, t dianggap sebagai ungkapan tatasusunan. Ungkapan ini ditukar secara automatik kepada penuding kepada elemen pertama tatasusunan (iaitu &t[0]) dalam kebanyakan konteks, termasuk operasi output.
  • Penunjuk kepada tatasusunan: Apabila didahului dengan operator &, t dianggap sebagai penunjuk kepada tatasusunan itu sendiri. Operasi ini menghasilkan alamat keseluruhan tatasusunan, bukan sekadar elemen pertamanya.

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!

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