[問題] 新手運算子的優先問題

看板C_and_CPP作者 (有錢沒錢當個阿宅好過年)時間12年前 (2012/04/17 21:36), 編輯推噓5(5017)
留言22則, 8人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++5.0 問題(Question): 小弟最近在學習指針的時候發生了運算子優先級的困擾... 程式碼如下 #include <stdio.h> #include <windows.h> int main(void) { int ar[6]={1,2,3,4,5,0}; int *ptr=ar; *ptr++; printf("%d\n",*p); printf("%p\n",p); system("pause"); } 疑惑出現*ptr++;這一段 我查書上有書說: 指針ptr先取值再自加的動作 不過也有書說 指針ptr先自加再取值的動作 神奇的是... 我查運算優先級資料 有後綴++優先於*的說法 也有後綴++與*同級的說法 還是這個問題是要看編譯器來決定? 煩請各位高手指點迷津 剛剛試了一下 *ptr++ 結果是2 記憶體是0022FEF8 *++ptr 結果是2 記憶體是0022FEF8 結果是一樣的 所以要如何解釋這兩個運作...越來越糊塗了 我在書上看到*(*zippo+2)+1 代表二維陣列[2][1]的值 感覺左邊不好理解啊.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.117.8 ※ 編輯: william6718 來自: 59.112.117.8 (04/17 21:38)

04/17 21:42, , 1F
你查的資料不太正確吧,簡單的觀念是除了::以外,只要是
04/17 21:42, 1F

04/17 21:43, , 2F
我想總是要先存*ptr才能再接著做之後的動作 不管++在前還後
04/17 21:43, 2F

04/17 21:43, , 3F
出現在右邊也就是像 [] () i++ 則其優先權一定最高
04/17 21:43, 3F

04/17 21:51, , 4F
04/17 21:51, 4F
※ 編輯: william6718 來自: 59.112.117.8 (04/17 22:08)

04/17 22:10, , 5F
你怎麼試的po code 上來.
04/17 22:10, 5F

04/17 22:11, , 6F
老實說我超討厭這種寫法,多加括號是會怎樣…
04/17 22:11, 6F

04/17 22:11, , 7F
就是把中間的*ptr++直接換成*++ptr
04/17 22:11, 7F

04/17 22:11, , 8F
另外原po可以用objdump來看compile後過的組語長怎樣
04/17 22:11, 8F

04/17 22:12, , 9F
對不起啊= = 書上確實是這麼寫的
04/17 22:12, 9F

04/17 22:15, , 10F
盡信書不如無書
04/17 22:15, 10F

04/17 22:15, , 11F
你沒有 side effect 的觀念吧,在 ptr++ 這個運算裡,主要
04/17 22:15, 11F

04/17 22:16, , 12F
任務是算出 ptr 的值,之後的遞增純粹是副作用,而第2個
04/17 22:16, 12F

04/17 22:17, , 13F
運算子 * 跟 ++ 之間沒有順序點,因此不保證何時需要遞增
04/17 22:17, 13F

04/17 22:28, , 14F
書本會有要先定義*ptr=ar只是解釋得不好懂
04/17 22:28, 14F

04/17 22:31, , 15F
結論就是加括號,別拿這個搞自己
04/17 22:31, 15F

04/17 22:40, , 16F
先謝謝各位高手 那所以後面二維陣列指針的"詭異寫法"
04/17 22:40, 16F

04/17 22:40, , 17F
就跳過別去理會嗎?
04/17 22:40, 17F

04/17 23:11, , 18F
哪個後面的詭異寫法,你根本沒貼大家怎麼判斷要不要理
04/17 23:11, 18F

04/17 23:13, , 19F
*先跟&一起學吧 陣列還早
04/17 23:13, 19F
※ 編輯: william6718 來自: 59.112.117.8 (04/17 23:23)

04/17 23:51, , 20F
改變ptr,結果print p,應該連compile都不會過。
04/17 23:51, 20F

04/18 00:13, , 21F
陣列解讀,可以看我寫的文章 #1ERylPtG (C_and_CPP)
04/18 00:13, 21F

04/18 00:54, , 22F
c++不清楚,不過C裡*,++是同級的,right to left
04/18 00:54, 22F
文章代碼(AID): #1FZN7TBp (C_and_CPP)
文章代碼(AID): #1FZN7TBp (C_and_CPP)