首頁 >後端開發 >C++ >字串文字的「sizeof」、「const char* const」和「const char[]」有什麼不同?

字串文字的「sizeof」、「const char* const」和「const char[]」有什麼不同?

Patricia Arquette
Patricia Arquette原創
2024-12-02 17:19:10668瀏覽

What's the Difference Between `sizeof` a String Literal, a `const char* const`, and a `const char[]`?

Sizeof String Literal:揭示差異

考慮以下程式碼片段:

#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;
}

執行此程式碼會顯示有趣的re sults:

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2

了解結果

  • sizeof("f"):計算結果為2,因為它包括字元「f」和終止空白字元' '.
  • sizeof(foo): 由於foo 是指針,因此sizeof(foo) 在32 位元系統上回傳4,在64 位元系統上回傳8。這表示指標本身的大小,而不是它指向的字串。
  • sizeof(bar): 此表達式回傳2,因為bar 是兩個字元的陣列: 'b' 和' '.

字串文字類型解釋

雖然sizeof計算字串文字所需的空間,但它不會改變其基礎類型。字串文字繼續具有「大小為 N of const char 的陣列」類型,其中 N 表示終止空字元。

陣列與指標行為

值得注意的是,陣列在傳遞給 sizeof 時不會衰減為指標。這意味著 sizeof(bar) 傳回的是數組本身的大小,而不是指向數組的指標的大小。

結論

綜上所述,sizeof(" f") 傳回字串文字所需的空間,包括空白字元。但是,由於涉及的類型差異,sizeof(foo) 和 sizeof(bar) 的行為有所不同。在 C 程式設計中使用字串文字時,理解這些細微差別至關重要。

以上是字串文字的「sizeof」、「const char* const」和「const char[]」有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn