ホームページ > バックエンド開発 > C++ > C の「sizeof」は文字列リテラル、配列、ポインタをどのように異なる方法で処理しますか?

C の「sizeof」は文字列リテラル、配列、ポインタをどのように異なる方法で処理しますか?

Linda Hamilton
リリース: 2024-12-07 09:03:13
オリジナル
154 人が閲覧しました

How Does `sizeof` Differently Handle String Literals, Arrays, and Pointers in C  ?

文字列リテラルのサイズ: 文字列定数のメモリ フットプリントを理解する

C では、文字列リテラルはコードの不可欠な部分であり、固定シーケンスを表します。文字の。 sizeof 演算子は、これらの文字列リテラルのメモリ割り当てとレイアウトを理解する上で重要な役割を果たします。

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

「f」などの文字列リテラルに適用される場合、sizeof 演算子は、終端の null 文字を含む、リテラルに格納されている文字数を測定します。 (' ')。 「f」の場合、「f」と null ターミネータの両方が含まれるため、2 文字を格納するのに必要なスペースが計算されます。

質問 2: 文字列リテラルには異なるものがありますか? sizeof?

文字列リテラルには固有の型があります。サイズが既知の文字の配列であり、サイズには null が含まれます。ターミネーター。この型は、char* (文字へのポインタ) や char[] (文字の配列) とは異なります。 sizeof に渡されると、文字列リテラルの配列型が維持され、ポインタのサイズではなく配列のサイズを反映した結果が得られます。

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

  • sizeof("f"): 2 を返します。 'f' と ' ' を含む文字の配列のサイズを測定するため。
  • sizeof(foo): 4 (32 ビット システムの場合) または 8 (64 ビット システムの場合) を返します。文字列リテラルのアドレスを保持するポインター変数 foo のサイズを測定します。
  • sizeof(bar): サイズを測定するため、2 を返します。 'b' と ' ' を含む文字の配列。

覚えておいてください:

  • 文字列リテラルの型は、サイズ N の配列です。 const char の値 (N には null ターミネータが含まれます)。
  • 配列は次のように減衰しません。 sizeof.
に渡されるときのポインター

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

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