左值與右值?
左值(L-value)與右值(R-value),二者之間的區別是什么?
左值與右值
01
這兩個術語是多年前由編譯器設計者所創造并沿用至今的,盡管它們的定義并不與C語言嚴格吻合,
02
左值就是那些可以出現在賦值符號左邊的東西;右值就是那些可以出現在賦值符號右邊的東西,
這樣的解釋有些脫下褲子放屁的意思,通過名稱我們也能得出左值和右值的意思,那么應該出現在賦值符號左邊的東西是什么呢?
03
1. a = b + 1;
2. b + 1 = a;
在陳述句1中,a是一個左值,因為它標識了一個可以存盤結果值的地點;b + 25是個右值,因為它指定了一個值,
那么,能像陳述句2一樣,互換左右值的位置嗎?
原先用作左值的a此時也可以作為右值,因為每個位置都包含一個值,然而,b + 25無法作為一個左值,因為它并未標識一個特定的位置,因此,陳述句2是非法的,
04
int a = 5;
++(a++);
如果嘗試執行此段代碼,則會出現如下報錯
main.c:4:2: error: expression is not assignable
++(a++);
^ ~~~~~
1 error generated.
報錯的意思為: 運算式不可賦值
將++(a++)拆解,++(a = a + 1) -> ++(5) -> 5 = 5 + 1,拆解之后,很容易就能發現問題所在,5是一個常量,它無法被賦值為6,
05 左值與右值
左值: 是指用于識別或定位的一個識別符號,同時左值還必須是可以被改變的
右值: 任何可以被讀取的值都是右值(非左值)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/285521.html
標籤:C
上一篇:服務器開發基礎-Tcp/Ip網路模型—完成埠(Completion Port)模型
下一篇:Linux C 檔案IO
