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
Patricia Arquetteasal
2024-11-30 20:40:17927semak imbas

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

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!

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