左辺値と右辺値の式
メモリ位置を示す式は「左辺値」式と呼ばれます。 左辺値は記憶領域の "ロケーター" 値や、等号 ( =
) の左側に表示されることを意味する "左" 値を表します。 多くの場合、左辺値は識別子です。
変更可能な場所を参照する式は、"変更可能な左辺値" と呼ばれます。変更可能な左辺値は、配列型、不完全な型、または 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 固有の仕様はここまで