C語言錯誤 left operand must be l value

2021-04-28 03:29:01 字數 2243 閱讀 6168

1樓:小夏在深圳

這句話「left operand must be l-value」左運算元必須是左值左值(l-value)。

出現於「=」左邊的識別符號。為變數右值出現於「=」右邊的識別符號。變數或表示式表示式是產生確定不變的值。

類似於a1x^n + a2x^n-1 +...+ an多項式(n>=1) 問題原因:*p+i 是一個表示式,是右值,不能對其進行賦值。

改正:這裡你應該用*(p+i)來表示陣列中的第i+1個變數;同樣的,還有*(p+j)。

左值指的是如果一個表示式可以引用到某一個物件,並且這個物件是一塊記憶體空間且可以被檢查和儲存,那麼這個表示式就可以做為一個左值。右值指的是引用了一個儲存在某個記憶體地址裡的資料。

左值其實要引用一個物件,而一個物件在程式中又肯定有一個名字或者可以通過一個名字訪問到,所以左值又可以歸納為左值表示程式中必須有一個特定的名字引用到這個值。

而右值引用的是地址裡的內容,所以相反右值又可以歸納為右值表示程式中沒有一個特定的名字引用到這個值除了用地址。

擴充套件資料

右值用於函式引數的源**如下

// 接收左值

void fun(int& lref)

// 接收右值

void fun(int&& rref)

int main()

2樓:

error c2106: '=' :left operand must be l-value 表示等號左邊必須為一個左值,該處錯誤為等號左邊為*p+i\j是表示式,不是一個左值。

問題分析

c語言的符號優先順序**(部分)如下表:

由該**可知取值符 * 運算優先順序高於加法運算子 +,因此 *p+i 和 *p+j 的運算均為先取值再加上變數,結果為一個數值,無法作為左值被賦值,只能用於賦值或比較故產生了該錯誤。

解決方法

此時賦值符 = 左邊均為左值即可被賦值的變數或儲存空間。故使用賦值符 = 時應對其左邊的內容稍加關注,避免此類由於優先順序導致的語法錯誤。

擴充套件資料

值得注意的是,賦值符正確使用時會附帶隱含的型別轉換,如果賦值運算子兩邊的資料型別不相同,系統將自動進行型別轉換,即把賦值號右邊的型別換成左邊的型別。具體規定如下:

1、實型賦予整型,捨去小數部分。此處應注意c語言的捨去一般採用截斷捨去,對整數部分不影響。

2、整型賦予實型,數值不變,但將以浮點形式存放,即增加小數部分,一般小數部分的值為0,但由於浮點數精度問題可能產生誤差。

3、字元型賦予整型,由於字元型為一個位元組,而整型為二個位元組,故將字元的ascii碼值放到整型量的低八位中,高八位為0。整型賦予字元型,只把低八位賦予字元量。此處實際賦值時與選擇的編譯器有關,具體編譯器需要具體分析。

3樓:迷你手工老張

出現該錯誤提示是因為語法錯誤。

「left operand must be l-value」的意思是左運算元必須是左值。

左值(l-value):出現於「=」左邊的識別符號。(為變數)。

右值(r-value):出現於「=」右邊的識別符號。(變數或表示式)。

表示式:產生確定不變的值。類似於a1x^n + a2x^n-1 +...+ an多項式(n>=1)。

*p+i 是一個表示式,是右值,不能對其進行賦值。應改用*(p+i)來表示陣列中的第i+1個變數,同樣的,還有*(p+j)。

4樓:傅福耿豐茂

錯誤提示很明確,左運算元必須是個左值。imul-imul得到的是一個臨時變數是一個右值,你不能對一個右值進行復制。

ps:看是不是左值我的觀點是看他能不能直接取到地址,imul-imul顯然你取不到。

5樓:匿名使用者

這句話「left operand must be l-value」說的多好!左運算元必須是左值!

左值(l-value):出現於「=」左邊的識別符號。(為變數)右值(r-value):

出現於「=」右邊的識別符號。(變數或表示式)表示式:產生確定不變的值。

類似於a1x^n + a2x^n-1 +...+ an多項式(n>=1)

問題原因:

*p+i 是一個表示式,是右值,不能對其進行賦值。

改正:這裡你應該用*(p+i)來表示陣列中的第i+1個變數;同樣的,還有*(p+j);

6樓:我是鄧大爺

你編譯能通過麼?sort沒宣告啊

C語言問題C語言問題,C語言小問題段錯誤是什麼

str2num char p num num k return num c語言問題c語言問題 include int main int h,m scanf d d h,m printf s num h if m 0 else printf o clock printf n return 0 c語言小...

C語言的錯誤,C語言中的錯誤和警告有什麼區別

語法錯誤,return前面缺少分號,上面一句printf最後沒加表示語句結束的分號 話說要學程式設計還是把英語練練吧,這麼簡單的英文提示都看不懂,以後比較麻煩 錯誤會導致程式無法編譯通過,進而不能執行而警告是說程式中有些 編寫不是非常恰當,不會影響程式編譯,在少數情況下會影響程式執行一般警告可以忽略...

c語言,編譯錯誤

最後兩個printf p大寫了,並且後面多了個空格!希望對你有幫助 include void main i,j,flag 1 for i 0 i 5 i for j 0 j 5 j scanf d a i j for i 0 i 5 i if flag 0 break if flag 1 print...