左辺値と右辺値の式

メモリ位置を示す式は「左辺値」式と呼ばれます。 左辺値は記憶領域の "ロケーター" 値や、等号 ( = ) の左側に表示されることを意味する "左" 値を表します。 多くの場合、左辺値は識別子です。

変更可能な場所を参照する式は、"変更可能な左辺値" と呼ばれます。変更可能な左辺値は、配列型、不完全な型、または const 属性がある型を持つことはできません。 構造体や共用体が変更可能な左辺値となるためには、 const 属性を持つメンバーを含んでいない必要があります。 識別子の名前は記憶領域の場所を表します。また、変数の値はその場所に格納されている値です。

識別子がメモリ位置を示し、演算型、構造体型、共用体型、またはポインター型である場合、その識別子は変更可能な左辺値です。 たとえば、ptr が記憶領域へのポインターである場合、*ptr は、ptr が指す記憶領域を指定する変更可能な左辺値です。

次のいずれの C 式も、左辺値の式となることができます。

  • 整数型、浮動型、ポインター型、構造体型、または共用体型の識別子

  • 配列に評価されない添字 ([ ]) 式

  • メンバー選択式 (-> または .)

  • 配列を示さない単項間接 (*) 式

  • かっこ内の左辺値式

  • const オブジェクト (変更不可能な左辺値)

式の値について説明し、左辺値と区別するために、「右辺値」という用語が使用されることがあります。 すべての左辺値は右辺値ですが、すべての右辺値が左辺値というわけではありません。

Microsoft 固有の仕様

Microsoft C には、オブジェクトのサイズがキャストで延長されない限り、左辺値のキャストを左辺値として使用できるようにする ANSI C 標準規格の拡張機能が備わっています。 (詳しくは、「型キャスト変換」を参照してください。) この機能を説明する例を次に示します。

char *p ;
short  i;
long l;

(long *) p = &l ;       /* Legal cast   */
(long) i = l ;          /* Illegal cast */

Microsoft C の既定では、Microsoft 拡張機能が有効になっています。 これらの拡張機能を無効にするには、/Za コンパイラ オプションを使用します。

Microsoft 固有の仕様はここまで

関連項目

オペランドおよび式