プログラミングにおいて、リテラルは変更できない定数値を表します。ただし、 C および C では、文字列リテラルがこの規則の例外として際立っています。他のすべてのリテラルは r 値 (一時値) ですが、文字列リテラルは l 値であるという独特の特性を持っています。
L 値としての文字列リテラルの理論的根拠
この独特の動作は、文字列リテラルの本質的な性質に由来しています。基本的なデータ型リテラル (整数、浮動小数点数など) とは異なり、文字列リテラルはオブジェクトに似ています。 C では、配列はオブジェクトに最も近い構造であり、文字列リテラルは基本的に文字の配列です。
L 値の重要性
L 値は、次のことができるオブジェクトを示します。識別可能なメモリの場所に割り当てられ、そこに常駐する必要があります。配列の場合、左辺値であるため、個々の要素を直接操作できます。逆に、r 値を直接割り当てて一時的な値を表すことはできません。
メモリ モデルの考慮事項
l 値と r 値の区別はコンピューターに根ざしています。建築。初期のコンピューターは、変更 (書き込み可能) とフェッチ (読み取り専用) に別々のメモリ領域を使用していました。 L 値は変更可能なデータを表し、r 値は不変の参照として機能しました。
代替設計上の考慮事項
文字列リテラルは、定数ポインターに似たポインター型を使用して設計できた可能性があります。 「内容」を文字列にします。しかし、そのようなアプローチでは、その有用性が低下してしまうでしょう。たとえば、sizeof 演算子はそれらには適用できません。
C99 の進化
C99 標準では複合リテラルが導入され、他のリテラルに l 値のステータスが付与されました。この変更は、l 値がもはや文字列リテラルだけに限定されず、標準になりつつあることをさらに強調しています。
以上がC および C では文字列リテラルが L 値であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。