[問題] ++ * 陣列 腦力激盪

看板C_and_CPP作者 (無題)時間10年前 (2013/08/26 22:33), 編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) devC++ 問題(Question): output value 程式碼(Code):(請善用置底文網頁, 記得排版) A:: int a[]={1,2,3,4,5,6}; int *p_a=a; int i; *(p_a++) +=123; *(++p_a) +=123; for(i=0;i<6;i++){ printf("a[%d]=%d\n",i,a[i]); } B:: int a[]={1,2,3,4,5,6}; int *p_a=a; int i; *p_a++ +=125; *++p_a +=125; for(i=0;i<6;i++){ printf("a[%d]=%d\n",i,a[i]); } 補充說明(Supplement): 請問大家對這兩題的答案 有什麼解釋的看法@@ 我覺得A跟B是不一樣 但實際上結果是一樣 對於A而言 *(p_a++) +=123; 這種句子要怎麼解譯 才是正確 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.185.139.29

08/26 22:41, , 1F
後加的優先順序比較高
08/26 22:41, 1F

08/26 22:45, , 2F
再來就是後綴++ 的副作用, 也就是p_a 什麼時候會多一的問題.
08/26 22:45, 2F
所以可以解釋成 *(p_a++) = *p_a+123 但我的問題是 (p_a++) 的優先權 應該比 *p_a高阿 但是為何第一個執行完是 {124,2,3,4,5,6} 而不是 {1,124,2,3,4,5,6} @@ ※ 編輯: JuliaRobert 來自: 111.185.139.29 (08/26 23:07)

08/26 23:07, , 3F
A, B 相同,只差在 123, 125。最後的問題,該算式可換成
08/26 23:07, 3F

08/26 23:08, , 4F
p_a[0] = p_a[0] + 123; p_a = p_a + 1;
08/26 23:08, 4F

08/26 23:10, , 5F
你說的對,p_a++ 優先權最高,所以第一個運算動作的結果將
08/26 23:10, 5F

08/26 23:11, , 6F
會,從 p_a 的所在處讀取出 p_a 的內容,至於遞增是副作用
08/26 23:11, 6F

08/26 23:19, , 7F
可以參考這篇我以前在本版回的 http://disp.cc/b/33-2QIq
08/26 23:19, 7F

08/27 00:00, , 8F
++ 優先權比 * 大,所以 *(p_a++) 等於 *p_a++
08/27 00:00, 8F

08/27 00:02, , 9F
再來*p_a++ +=123 先運算後遞增,*++p_a +=123 先遞增後運算
08/27 00:02, 9F

08/27 00:03, , 10F
我剛學C++沒多久,以上是我的理解,有錯請指正,謝謝~
08/27 00:03, 10F
文章代碼(AID): #1I6sSdAA (C_and_CPP)