在做c語言聯絡的時候,總是會出現左運算元必須是左值,
左值就是在賦值中可以放在賦值操作符兩邊的值,比如: int a = 1; double b = 2.0 a = b; b = a; 這裡a和b都是左值,一切變數都是左值,但const量是例外。 *p是乙個左值,和變數一樣,只要在*p的右邊加上賦值運算子,就可改變*p的值。 如果p是乙個指向常量的指標,*p就是乙個不能修改的左值,即它不能被放到賦值運算子的左邊。 i和 -i 都是表示式 但乙個是左值(i),乙個是右值(-i)。 ++,--這兩種操作符要求作用於左值,所以i++合法,(-i)++不合法。
不嚴謹的講,左值右值的區分在於位於等號的那一側,左側的是左值,通常是乙個變數,右側的是右值,可以是乙個變數,或者是乙個表示式。 先看什麼是表示式: 表示式由乙個或多個運算元通過操作符組合而成。最簡單的表示式僅包含乙個字面值常量或變數。較複雜的表示式則由操作符以及乙個或多個運算元構成。 再看什麼是左值: c++ 中存在兩種表示式:左值可以出現在賦值語句的左邊或右邊。右值只能出現在賦值的右邊,不能出現在賦值語句的左邊。 另外說明一下,i不僅是乙個表示式,它還是乙個變數,但是-i卻不是乙個變數,這是他們乙個可以自增乙個不能自增的根本原因 對於i++來說,i是乙個變數,所以是乙個左值,執行i=i+1 但是對於(-i)++來說,-i是乙個表示式,而不是乙個變數,乙個表示式是不可以作為左值的,因為沒有辦法執行這條語句:-i=-i+1(-i+1的值不能附給-i,因為沒有-i這個變數儲存空間) 乙個賦值表示式: x = y; 在這個表示式裡,符號x的含義是x所代表的位址,這被稱為左值,左值在編譯時可知,左值表示儲存結果的地方; 在這個表示式裡,符號y的含義是y所代表的位址的內容,這被稱為右值,右值在執行時才可知,如無特別說明,右值表示「y的內容」。
在《c專家程式設計(中文版)》中第4章,對左值和右值的基本描述。 而右值則是只可以放在賦值操作符右邊的值,比如: int a = 0; char *b = "hello"; 3 = a; // error "howdy" = b // error 這裡3和"howdy"都是右值,所以不能放在賦值操作符左邊,一切常數、字元和字串都是右值
C語言中的左值右值
一般說來出現在 左邊的是左值,出現在 右邊的是右值,左值是可改變的值,出現在賦值號左邊的符號所代表的位址上的內容一定是可以被修改的,唯讀變數是不能做左值的。i 就可以作為左值,而 i 卻不能作為左值。這也是為什麼 i 合法,而 i 卻不合法。變數 i i為左值時 編譯器認為 i 代表的是 i 的位址...
C語言中什麼叫做左值?右值?
左值就是在賦值中可以放在賦值操作符兩邊的值,比如 int a 1 double b 2.0 a b b a 這裡a和b都是左值,一切變數都是左值,但const變數是例外。p是乙個左值,和變數一樣,只要在 p的右邊加上賦值運算子,就可改變 p的值。如果p是乙個指向常量的指標,p就是乙個不能修改的左值,...
C語言中出現error的解決辦法
1.error expected unqualified id before 後面的分號一定不能落下 3.undefined reference to winmain 16 這個錯誤是出現在主函式缺少的情況下。其中一種情況是當需要用另乙個同名檔案來覆蓋當前檔案時,如果你使用的是ctrl a ctrl...