ホームページ > バックエンド開発 > C++ > 「sizeof」が文字列リテラル、ポインタ、文字配列に対して異なる結果を生成するのはなぜですか?

「sizeof」が文字列リテラル、ポインタ、文字配列に対して異なる結果を生成するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-01 06:28:15
オリジナル
896 人が閲覧しました

Why Does `sizeof` Produce Different Results for String Literals, Pointers, and Character Arrays?

文字列リテラルのサイズ

指定されたコードは、さまざまな種類の文字列定数に対する sizeof 演算子の使用法を示しています。出力では、文字列リテラル sizeof("f") のサイズが、文字列リテラルへのポインターのサイズ (sizeof(foo)) および文字配列のサイズ (sizeof(bar) とは異なることがわかります。 )).

なぜ sizeof は文字列リテラルの長さを計算するのですか?

sizeof 演算子オペランドのサイズをバイト単位で計算します。文字列リテラルの場合、オペランドは、終端の null (' ') 文字を含む、対応する文字配列表現です。これは、'f' 文字と ' ' 文字を考慮した、sizeof("f") の 2 の出力を説明しています。

sizeof に与えられた文字列リテラルは異なる型ですか?

いいえ。文字列リテラルの型は const char[N] です。N は、終端の null 文字を含む文字列の長さです。ただし、文字列リテラルを sizeof 演算子に渡す場合、文字列は文字へのポインターの型である const char* 型の式として扱われます。これは、sizeof(foo) の出力 4 が 32 ビット マシン上のポインターのサイズであることを説明しています。

追加ポイント:

  • 配列は sizeof に渡されるときにポインタに減衰しません。これは、bar が定数文字配列であるため、sizeof(bar) の出力 2 を説明しています。
  • sizeof への文字列リテラル引数の型が結果に影響します。たとえば、オペランドが const char* 型の式であるため、sizeof("foo" 1) は 32 ビット マシンでも 64 ビット マシンでも 4 を返します。

以上が「sizeof」が文字列リテラル、ポインタ、文字配列に対して異なる結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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