從左值的定義來看i++為什麼不能作為左值,而++i可以作為左值
今天看書見到如下程式碼:
int a=2;
++a++;
根據操作符的優先順序和結合性知,操作符++的優先順序為3,結合性為右結合,即++a++;可以理解為++(a++);
但我把程式碼放在vs2015上,結果報錯,如圖:
意思就是所a++不能作為左值,那a++為什麼不能作為左值呢?我們先來看左值的定義:
左值(lvalue) 是B語言/C語言/C++語言等類C語言中的一類表示式。“左”(left)的原意是指可以放在賦值符號“=”的左邊,但其實也表示能作為&和++等操作符的運算元(B語言中已經如此)。左值不但具有空間實體,還具有讀寫訪問權。
現在我們來看a++的實現:
int temp;
temp=a;
a=a+1;
return temp;
因為a++返回的是編譯器自動分配的臨時變數temp,而這個temp並不是你程式中定義的可定址變數的引用 ,也就是說你不能通過地址對它進行操作.(換句話說就是不能作為左值)。
而++a的實現為:
a=a+1;
return a;
因為++a返回的是a,它是程式中定義的可定址變數的引用,所以它可以作為左值。
相關推薦
從左值的定義來看i++為什麼不能作為左值,而++i可以作為左值
今天看書見到如下程式碼: int a=2; ++a++; 根據操作符的優先順序和結合性知,操作符++的優先順序為3,結合性為右結合,即++a++;可以理解為++(a++); 但我把程式碼放在vs2015上,結果報錯,如圖: 意思就是所a++不能作為左值,那a++為什麼不能作為左值
js--獲取/賦值文字值innerText/textContent、innerHTML的區別,獲取表單的值;js事件物件屬性target於currentTarget
<body> <div id="box_text"> <p style="color:hotpink;">muzidigbig</p> <p style="color:pink">
java中為什麼列印char陣列輸出是值,而其他是地址值
首先println方法對陣列的處理是先轉化為String型別,我們可以進入println原始碼看一下,我是建立了一個String陣列進去看了下 public void println(Object x) {
Python:類屬性,例項屬性,私有屬性與靜態方法,類方法,例項方法 屬性分為例項屬性與類屬性 方法分為普通方法,類方法,靜態方法 一:屬性: 儘量把需要使用者傳入的屬性作為例項屬性,而
屬性分為例項屬性與類屬性 方法分為普通方法,類方法,靜態方法 一:屬性: 儘量把需要使用者傳入的屬性作為例項屬性,而把同類都一樣的屬性作為類屬性。例項屬性在每創造一個例項時都會初始化一遍,不同的例項的例項屬性可能不同,不同例項的類屬性都相同。從而減少記憶體。 1:例項屬性: 最
動態input type="radio"選中,而不是賦值
$("input[name='marginType']").get(0).checked=false; $("input[name='marginType']").get(1).checked=tr
Android實戰技巧:為從右向左語言定義複雜字串,程式碼和xml設定
程式碼方式,一般是放在一個Utils.java作為公共方法 /// add by xxx.zhou for ArabicRTL support 20141024 begin public static boolean isContainEG_I
定義一個帶參的巨集,使兩個引數的值互換,並寫出程式,輸入兩個數作為使用巨集時的實參。輸出已交換後的兩個值。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanne
設計一個 Java 程式,自定義異常類,從命令列(鍵盤)輸入一個字串,如果該字串值為“XYZ”。。。
設計一個 Java 程式,自定義異常類,從命令列(鍵盤)輸入一個字串,如果該字串值為“XYZ”,則丟擲一個異常資訊“This is a XYZ”,如果從命令列輸入 ABC,則沒有丟擲異常。(只有 XYZ 和 ABC 兩種輸入)。 class xyz { public void test(S
不可思議的顏色混合模式 mix-blend-mode (轉) 談談一些有趣的CSS題目(四)-- 從倒影說起,談談 CSS 繼承 inherit 談談一些有趣的CSS題目(五)-- 單行居中,兩行居左,超過兩行省略 談談一些有趣的CSS題目(九)-- 巧妙的實現 CSS 斜線
開本系列,談談一些有趣的 CSS 題目,題目型別天馬行空,想到什麼說什麼,不僅為了拓寬一下解決問題的思路,更涉及一些容易忽視的 CSS 細節。 解題不考慮相容性,題目天馬行空,想到什麼說什麼,如果解題中有你感覺到生僻的 CSS 屬性,趕緊去補習一下吧。 不斷更新,不斷更新,不斷更新,重
js javascript 自定義json資料格式,以變數作為鍵名,自定義鍵值對
js中的 json 格式資料,當用變數作為鍵(名)時,如:var a = $('#cid').val(); var b = $('#goods_name').val(); var j = {a:b}:這樣 a 是不會被解析的,正確寫法應該是:var a = $('#cid')
字串或者陣列的迴圈左移或右移(不開闢額外的空間存放中間值)
對於的這樣的問題,我剛開始是有點蒙逼的,感覺不開闢額外的空間怎麼實現額。。。後來想起來以前老師有提過不用額外的空間交換兩個資料的演算法,頓時感覺有思路了。說白了陣列的左移就是一個交換的過程,既然能做到
cocos2dx 3.1從零學習(二)——菜單、場景切換、場景傳值
天空 ptr select 特效 new 要點 綁定 使用 water 回想一下上一篇的內容,我們已經學會了創建一個新的場景scene,加入sprite和label到層中。掌握了定時事件schedule。我們能夠順利的寫出打飛機的主場景框架。 上一篇的內容我練習了七個新
從ajax的回調函數(success等)中取返回值
ray div eno log left 應該 var code msg 1 var strs = new Array(); 2 3 function getData() { 4 var strs2 = n
ESP8266 是一個完整且自成體系的 WiFi 網絡解決方案,能夠獨立運行,也可以作為從機搭載於其他主機 MCU 運行
處理 天線 -1 系統資源 pwm adc 高度 能夠 能力 ESP8266EX 在搭載應用並作為設備中唯一的應用處理器時,能夠直接從外接閃存中啟動。內置的高速緩沖存儲器有利於提高系統性能,並減少內存需求。另外一種情況是,ESP8266EX 負責無線上網接入承擔 WiF
HDU 6141 I am your Father!(最小樹形圖+權值編碼)
get blog while node color amp target 沒有 樹根 http://acm.hdu.edu.cn/showproblem.php?pid=6141 題意: 求最大樹形圖。 思路: 把邊的權值變為負值,那麽這就是個最小樹形圖了,直
從function的定義看JavaScript的預加載
cells 預編譯 bject 封裝 .com 建議 定義 網上 感覺 在JavaScript中定義一個函數,有兩種寫法: 1 2 function ftn(){} // 第一種 var ftn = function(){} //
從Python的角度來看編碼與解碼
異常 字符 default 疑問 習慣 中文字符集 nbsp prompt ans 導語: Python2和Python3中,因為默認字符集的不同而造成的麻煩,簡直是程序員的夢魘!要徹底告別這個麻煩,就需要從本質上來理解編碼和解碼。 為什麽要有編碼? 對於不會英文的中國
Python從菜鳥到高手(8):print函數、賦值與代碼塊
images rec 控制臺輸出 error enter sam 運算 賦值 編程語言 1.神奇的print函數 ??print函數相信讀者一定對它不陌生,因為在前面的章節,幾乎每個例子都使用了print函數,這個函數的功能就是在控制臺輸出文本。不過print在輸出文本時還
CSS特效(7)——單行居中,多行居左,超過兩行用省略號
block lang overflow normal ips http init lin amp 單行居中,多行居左,超過兩行用省略號 <!DOCTYPE html> <html lang="en"> <head> <meta
css flex多行時,最後一行元素左對齊
info 元素 justify between 圖片 png 分享圖片 結果 一行 在flex多行布局中,justify-content: space-between; 這個屬性如果最後一行元素沒有填滿,會導致最後一行元素兩端對齊 解決方案: 1.添加空的元素(缺少幾個添