Rumah >pembangunan bahagian belakang >C++ >Mengapa Menambah Penunjuk Integer dalam C Meningkatkan Alamat sebanyak 4 Bait?

Mengapa Menambah Penunjuk Integer dalam C Meningkatkan Alamat sebanyak 4 Bait?

Susan Sarandon
Susan Sarandonasal
2024-11-28 17:48:11995semak imbas

Why Does Incrementing an Integer Pointer in C Increase the Address by 4 Bytes?

Mengapa Penambahan Penunjuk int Mempengaruhi Alamat sebanyak 4 Bait

Dalam pengaturcaraan C, apabila nilai penuding int ditambah dengan 1, ia meningkat sebanyak 4 bait dan bukannya 1 bait yang dijangkakan. Ini kerana pembolehubah penuding menyimpan alamat memori pembolehubah, dan pada kebanyakan seni bina, saiz integer ialah 4 bait.

Meningkatkan Penunjuk sebanyak 1 Alamat Kenaikan sebanyak 4

Apabila penuding int ditambah dengan 1, ia tidak menggerakkan penuding hanya dengan saiz satu bait (iaitu saiz watak). Sebaliknya, ia menggerakkannya mengikut saiz jenis data yang ditunjukkannya (dalam kes ini, int), yang bagi kebanyakan seni bina ialah 4 bait.

Justifikasi untuk Peningkatan Alamat sebanyak 4

Sebab kenaikan ini adalah untuk mengekalkan penjajaran yang betul semasa mengakses data. Menaikkan sebanyak 4 bait memastikan penunjuk sentiasa menunjuk ke permulaan lokasi memori yang boleh memegang nilai int. Jika penuding meningkat sebanyak 1 bait sahaja, ia berpotensi menghala ke lokasi memori yang tidak dijajarkan dengan betul, membawa kepada ralat atau kelakuan yang tidak dapat diramalkan.

Melawat 4 Bait int

Jika anda perlu melawati 4 bait int satu demi satu, anda boleh menghantar penuding int ke penunjuk char dan kemudian gunakan pengindeksan tatasusunan. Setiap bait int boleh diakses sebagai elemen tatasusunan aksara.

Contoh:

int a = 1;
int *ptr = &a;

char *cptr = (char *)ptr;
for (int i = 0; i < sizeof(int); i++) {
    printf("%d\n", cptr[i]);
}

Ini akan mencetak empat bait satu demi satu sebagai:

1
0
0
0

Atas ialah kandungan terperinci Mengapa Menambah Penunjuk Integer dalam C Meningkatkan Alamat sebanyak 4 Bait?. 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