左值和右值運算式
參考記憶體位置的運算式稱為「左值」運算式。 左值代表儲存區域的「定位程式」值或「左」值,表示它可以在等號 (=
) 的左側出現。 左值通常是識別項。
參考可修改位置的表達式稱為「可修改的 l 值」。可修改的 l 值不能有數位類型、不完整的類型或具有 屬性的類型 const
。 若要讓結構和等位成為可修改的 l 值,它們不得具有屬性 const
的任何成員。 識別項的名稱表示儲存位置,而變數值是指儲存在該位置的值。
如果識別項參考記憶體位置且其類行為算術、結構、等位或指標,該識別項就是可修改的左值。 例如,如果 ptr
是儲存區域的指標,則 *ptr
是指定 ptr
所指向之儲存區域的可修改左值。
下列任何 C 運算式都可以是左值運算式:
整數類資料、浮點、指標、結構或等位型別的識別項。
未評估為陣列的下標 (
[ ]
) 表示式成員選取表示式 (
->
或.
)不參考數位的一元間接 (
*
) 表示式括號內的左值運算式
const
物件(不可修改的 l 值)
「右值」這個詞有時用來描述運算式的值,並且與左值做區分。 所有左值都是右值,但並非所有右值都是左值。
Microsoft 特定的
Microsoft C 包含 ANSI C 標準的延伸模組,允許將 l 值轉換當做 l 值使用,只要物件的大小不是透過轉換來延長。 (如需詳細資訊,請參閱 Type-Cast Conversions.)下列範例說明這項功能:
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
Microsoft C 預設會啟用 Microsoft 擴充功能。 使用 /Za 編譯器選項以停用這些延伸模組。
END Microsoft 特定的