[問題] 運算子順序

作者: blueblueChen (藍藍欠)   2016-07-29 14:03:58
int array[3] = {9,6,10}
int *ptr = array;
*ptr++=3;
ptr[0] ptr[1] ptr[2] 各是多少?
網上搜尋 printf("%d",*ptr++);
印出 9 後,ptr 再做++動作,也就是下一個 ptr 會是指到 6 的位址
那請問 *ptr++=3 這個式子,他是先做++動作還是先做 assign 動作呢?
謝謝。
一直搞不清楚 ++ 到底是最後做還是...先做~"~
作者: azureblaze (AzureBlaze)   2016-07-29 14:14:00
程式不要這樣寫,別管什麼順序
作者: kyuudonut (善良老百姓)   2016-07-29 14:23:00
是不會直接拿debugger做測試嗎……
作者: hichcock (快樂一整年 ^^~~~)   2016-07-29 14:51:00
為什麼要用 "搞不清楚" 的語法, 先搞清楚再用不是很好
作者: CoNsTaR ((const *))   2016-07-29 16:12:00
一樣是 right-left rule 就能解決的東西啊…
作者: LPH66 (-6.2598534e+18f)   2016-07-29 16:55:00
right-left rule 不是拿來判斷優先度的這裡的優先度順序是 postfix++, deref*, =所以前半的結果為 ptr 所指位置, = 後該位置為 3故 array[0] 為 3; ptr 在此後往後移一格, 故 ptr[0] 取得array[1] 為 6, 同理 ptr[1] 為 10, ptr[2] 為不知道啥東東
作者: Ommm5566 (56天團)   2016-07-29 17:07:00
括號阿幹
作者: blueblueChen (藍藍欠)   2016-07-29 17:11:00
Android hal 層這樣寫,不懂他這樣寫法,自己做測試
作者: CoNsTaR ((const *))   2016-07-29 17:11:00
我記得 right-left rule 的確可以判斷 unary operator的優先度喔…是發明這方法的那個印度人自己講的
作者: blueblueChen (藍藍欠)   2016-07-29 17:13:00
想要了解,卻發現我自己無法解釋,這樣我androidcode 無法完全懂他意思
作者: CoNsTaR ((const *))   2016-07-29 17:17:00
這個一眼就該看出來的東西 有些人自己沒學好看不太不懂就像聽不懂英文就不准別人說英文一樣 說中文阿幹你講英文 聽不懂的人怎麼辦 你母語中文 講英文自己不會很困擾
作者: blueblueChen (藍藍欠)   2016-07-29 17:20:00
是...我的確沒學好=="
作者: CoNsTaR ((const *))   2016-07-29 17:21:00
不是講你XD 是某樓看不懂又愛噓
作者: Caesar08 (Caesar)   2016-07-29 18:02:00
為什麼你不先查C++ Operator Precedence?
作者: Ommm5566 (56天團)   2016-07-29 18:45:00
哈哈 看得懂很高竿? 據我所知現代主流好像是程式碼要讓別人看得懂 你一眼就看懂不代表之後維護的人可以一眼看懂 結果不是要想一下 就是動手整理很抱歉我第一眼看的結果是 {9, 3 ,10}講錯 3,6,10 你看吧 不直覺i++ 打開來看 其實是做了temp = i; 用 temp計算然後temp = temp+1 最後才i=temp所以先assign 3 然後ptr後移一格因此拿到 6 10 和一個未知物
作者: wtchen (沒有存在感的人)   2016-07-29 19:09:00
Ommm5566請注意語氣
作者: Sidney0503 (Sidney0503)   2016-07-29 19:09:00
據我所知 t=i;i=i+1;return t;沒有t+=1 這樣太慢啦XD某O好像在某job板被警告語氣 年輕人太衝動囉
作者: CoNsTaR ((const *))   2016-07-29 19:25:00
不是說寫得複雜比較好 只是你該要求自己複雜的 code 也要能看得懂而不是要求到你手上的 code 都符合你「簡潔易懂」的預期啊看到別人在精進學習看懂這些語法 不知道有什麼好噓的會寫簡潔易懂的 code 就可以噓想上進的人?
作者: Ommm5566 (56天團)   2016-07-29 19:29:00
對不起 我發言不當 在這邊作誠摯的道歉請原PO砍除我的不當推文

Links booklink

Contact Us: admin [ a t ] ucptt.com