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

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

Patricia Arquette
發布: 2024-12-02 17:19:10
原創
745 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板