Rumah > pembangunan bahagian belakang > C++ > Mengapakah `sizeof` Mengembalikan Nilai Berbeza untuk String Literals, Pointers dan Arrays dalam C ?

Mengapakah `sizeof` Mengembalikan Nilai Berbeza untuk String Literals, Pointers dan Arrays dalam C ?

Patricia Arquette
Lepaskan: 2024-11-30 20:40:17
asal
921 orang telah melayarinya

Why Does `sizeof` Return Different Values for String Literals, Pointers, and Arrays in C  ?

Sizeof String Literal

Dalam C , sizeof mengira saiz jenis data atau ungkapan. Apabila digunakan pada literal rentetan, sizeof mengira panjang literal, termasuk aksara null yang ditamatkan (' ').

Memahami Output

Kod yang disediakan mengira saiz rentetan literal, const char* const dan const char[]. Output pada OS 32-bit yang disusun dengan GCC ialah:

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
Salin selepas log masuk

Mengapa sizeof Mengira Panjang String Literal

sizeof("f") menilai kepada 2 kerana rentetan literal terdiri daripada aksara 'f' dan nol penamat aksara.

Jenis dalam saiz Ungkapan

  • Rentetan literal "f" ialah tatasusunan saiz 2 const char, termasuk penamat nol.
  • Penunjuk foo ialah const char* const, yang menunjuk kepada const char dan ialah dirinya sendiri const.
  • Bar tatasusunan ialah aksara const[] bersaiz 2, mengandungi 'b' dan penamat nol.

Kaveat: Tatasusunan dalam saiz

Perhatikan bahawa tatasusunan tidak mereput kepada penunjuk apabila dihantar ke sizeof. Oleh itu, sizeof(bar) mengembalikan 2 dengan betul dan bukannya saiz penuding (4 pada OS 32-bit).

Atas ialah kandungan terperinci Mengapakah `sizeof` Mengembalikan Nilai Berbeza untuk String Literals, Pointers dan Arrays dalam C ?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan