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

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

Patricia Arquette
リリース: 2024-11-30 20:40:17
オリジナル
929 人が閲覧しました

Why Does `sizeof` Return Different Values for String Literals, Pointers, and Arrays in C  ?

Sizeof String Literal

C では、 sizeof はデータ型または式のサイズを計算します。文字列リテラルに適用すると、sizeof は終端の null 文字 (' ') を含むリテラルの長さを計算します。

出力の理解

提供されたコードは次のように計算します。文字列リテラル、const char* const、および const char[] のサイズ。 GCC でコンパイルされた 32 ビット OS での出力は次のとおりです。

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
ログイン後にコピー

sizeof が文字列リテラルの長さを計算する理由

sizeof("f") は次のように評価します。文字列リテラルは文字「f」と終端の null で構成されているため、2 に変更されます。 Character.

式の sizeof の型

  • 文字列リテラル "f" は、null ターミネータを含む const char のサイズ 2 の配列です。
  • ポインタ foo は const char* const であり、const char を指し、それ自体がconst.
  • 配列 bar はサイズ 2 の const char[] で、'b' と null 終端文字が含まれます。

注意: sizeof 内の配列

配列は sizeof に渡されたときにポインターに分解されないことに注意してください。したがって、sizeof(bar) はポインター サイズ (32 ビット OS では 4) の代わりに 2 を正しく返します。

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

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