ホームページ > バックエンド開発 > C++ > 文字列リテラルの「sizeof」、「const char* const」、および「const char[]」の違いは何ですか?

文字列リテラルの「sizeof」、「const char* const」、および「const char[]」の違いは何ですか?

Patricia Arquette
リリース: 2024-12-02 17:19:10
オリジナル
744 人が閲覧しました

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

文字列リテラルのサイズ: 違いを解明する

次のコード スニペットを考えてみましょう。

#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;
}
ログイン後にコピー

このコードを実行すると、次のことがわかります。興味深いresults:

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): bar は 2 つの文字の配列であるため、この式は 2 を返します: 'b' と 'b' ' '.

文字列リテラル型解釈

sizeof は文字列リテラルに必要なスペースを計算しますが、その基になる型は変更しません。文字列リテラルは引き続き「const char のサイズ N の配列」型を持ちます。N は終端の null 文字を表します。

配列とポインターの動作

配列が sizeof に渡されたときにポインターに分解されないことに注意することが重要です。これは、sizeof(bar) が配列へのポインターのサイズではなく、配列自体のサイズを返すことを意味します。

結論

要約すると、sizeof(" f") は、NULL 文字を含む文字列リテラルに必要なスペースを返します。ただし、sizeof(foo) と sizeof(bar) は、関係する型の違いにより動作が異なります。 C プログラミングで文字列リテラルを扱う場合、これらのニュアンスを理解することが不可欠です。

以上が文字列リテラルの「sizeof」、「const char* const」、および「const char[]」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート