⑴ c語言,關於左值,右值的概念問題
1、例如:a[3] = 5;*p = 55;
2、非常量的變數空間可以寫入,自然就是左值了
3、右值指的是常量或者比如算術運算的中間結果,只能讀出,不能寫入,當然就是右值了
一般而言,左值是可以作為右值的,左值的本意是只寫,右值的本意是只讀
⑵ 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是左值
⑷ C語言 什麼叫做左值右值
左值,就是指可以被取地址的表達式。簡單的說,可以出現在等號左邊的就是左值。比如:
⑸ 有些C語言書裡面說的左值和右值到底什麼意思。詳解…
c語言裡面只有左值和非左值,沒有右值。
左值可以定址的變數,也可以理解為可以放在賦值號左邊的變數。
非左值就是左值以外的變數常量等值。
c++裡面才有右值的概念。
⑹ C++中提到的左值是什麼意思
在C語言中,左值(left value),指在賦值表達式(assignment expression)中作為將要賦予值的地址的表達式。
例如在賦值語句
i=10;
中i就是一個左值,它必須是一個變數,或是一個解引用的指針(如下)
int*p;
*p=10;
在C的yacc語法中,賦值表達式被這樣定義
assignment_expression
:conditional_expression
|unary_expressionassignment_operatorassignment_expression
;
也就是說,在純語法的層面,左值必須是一元表達式
⑺ C語言什麼叫做左值右值
左值就是在賦值中可以放在賦值操作符兩邊的值,比如:
inta=1;
doubleb=2.0
a=b;
b=a;
這里a和b都是左值,一切變數都是左值,但const量是例外。
而右值則是只可以放在賦值操作符右邊的值,比如:
inta=0;
char*b="hello";
3=a;//ERROR
"howdy"=b//ERROR
這里3和"howdy"都是右值,所以不能放在賦值操作符左邊,一切常數、字元和字元串都是右值。
⑻ 左值和右值的區別
左值(lvalue)和右值(rvalue)最先來源於編譯。在C語言中表示位於賦值運算符兩側的兩個值,左邊的就叫左值,右邊的就叫右值。
定義:
左值指的是如果一個表達式可以引用到某一個對象,並且這個對象是一塊內存空間且可以被檢查和存儲,那麼這個表達式就可以作為一個左值。
右值指的是引用了一個存儲在某個內存地址里的數據。
從上面的兩個定義可以看出,左值其實要引用一個對象,而一個對象在我們的程序中又肯定有一個名字或者可以通過一個名字訪問到,所以左值又可以歸納為:左值表示程序中必須有一個特定的名字引用到這個值。而右值引用的是地址里的內容,所以右值又可以歸納為:右值表示程序中沒有一個特定的名字引用到這個值。
++a的話因為返回結果和運算之後的a一樣,所以++a返回的是真實的a,可以被重新賦值,所以可以作為左值。而a++返回的是運算之前的a,而此時a已經+1了,返回的數據其實是過去的a,它是另外復制出來的,而不是真正的a,所以無法被賦值,所以它只能是右值。
所以a++;在執行當中的順序是,先把a的值復制出來,進行整體運算,然後再a=a+1。