Rumah >pembangunan bahagian belakang >C++ >Apakah Perbezaan Antara `sizeof` String Literal, `const char* const` dan `const char[]`?

Apakah Perbezaan Antara `sizeof` String Literal, `const char* const` dan `const char[]`?

Patricia Arquette
Patricia Arquetteasal
2024-12-02 17:19:10664semak imbas

What's the Difference Between `sizeof` a String Literal, a `const char* const`, and a `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

  • sizeof("f"): Ini dinilai kepada 2, kerana ia termasuk aksara 'f' dan aksara nol penamat ' '.
  • sizeof(foo): Memandangkan foo ialah penunjuk, sizeof(foo) mengembalikan 4 pada sistem 32-bit dan 8 pada sistem 64-bit. Ini mewakili saiz penuding itu sendiri, bukan rentetan yang ditunjukkannya.
  • sizeof(bar): Ungkapan ini mengembalikan 2 kerana bar ialah tatasusunan dua aksara: 'b' dan ' '.

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!

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