Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah alamat tatasusunan dalam C bersamaan dengan alamat penuding kepada elemen pertamanya?

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

DDD
DDDasal
2024-11-22 08:08:10191semak imbas

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;

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:

  • 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!

Kenyataan:
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