Rumah >pembangunan bahagian belakang >C++ >Apakah Perbezaan Antara `sizeof` String Literal, `const char* const` dan `const char[]`?
Saiz Rentetan Tersurat: Membongkar Perbezaan
Pertimbangkan coretan kod berikut:
#include <iostream> using namespace std; int main() { const char* const foo = "f"; const char bar[] = "b"; cout << "sizeof(string literal) = " << sizeof("f") << endl; cout << "sizeof(const char* const) = " << sizeof(foo) << endl; cout << "sizeof(const char[]) = " << sizeof(bar) << endl; }
Melaksanakan kod ini mendedahkan menarik minat keputusan:
sizeof(string literal) = 2 sizeof(const char* const) = 4 sizeof(const char[]) = 2
Memahami Keputusan
Tafsiran Jenis Tersurat Rentetan
Sementara sizeof mengira ruang yang diperlukan untuk rentetan literal, ia tidak mengubah jenis asasnya. Rentetan literal terus mempunyai jenis 'tatasusunan saiz N bagi const char', di mana N mengambil kira aksara nol penamat.
Tingkah Laku Tatasusunan lwn. Penunjuk
Adalah penting untuk ambil perhatian bahawa tatasusunan tidak mereput kepada penunjuk apabila dihantar ke sizeof. Ini bermakna sizeof(bar) mengembalikan saiz tatasusunan itu sendiri, bukan saiz penuding kepada tatasusunan.
Kesimpulan
Ringkasnya, sizeof(" f") mengembalikan ruang yang diperlukan untuk rentetan literal, termasuk aksara nol. Walau bagaimanapun, sizeof(foo) dan sizeof(bar) berkelakuan berbeza disebabkan perbezaan jenis yang terlibat. Memahami nuansa ini adalah penting apabila bekerja dengan literal rentetan dalam pengaturcaraan C.
Atas ialah kandungan terperinci Apakah Perbezaan Antara `sizeof` String Literal, `const char* const` dan `const char[]`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!