[問題] 指標陣列的運算問題
各位大大你們好
最近在學習指標時發現一個問題
其實說是指標問題
到不如說是運算問題
先附上我的程式碼
http://ideone.com/jXGjmA
這題我預想的結果應該要是
13 15 17 19 21
但是出來的結果卻不是如此
我的問題是在
*ptr = *(ptr++) + con;
這行我認為應該是先做
*ptr = *ptr +con;
然後才 ptr++
所以應該會是 13 15 17 19 21
但為什麼不是呢
懇請各位大大幫忙解答
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 150.117.221.154
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1491809129.A.349.html
推
04/10 15:34, , 1F
04/10 15:34, 1F
但是我用codeblock執行出來的結果是
3 13 23 33 43
跟預期的結果不一樣ㄝ
※ 編輯: cozychocolat (150.117.221.154), 04/10/2017 15:39:54
→
04/10 15:44, , 2F
04/10 15:44, 2F
對ㄝ
我用以下程式碼測試
x=1
for(i=1 ; i<=5 ; i++)x=x++
輸出的x值都是1
但是在原程式當中
ptr的值每次都有變化
都是指向array的下一個位置
這又是為什麼呢
※ 編輯: cozychocolat (150.117.221.154), 04/10/2017 16:10:32
推
04/10 16:23, , 3F
04/10 16:23, 3F
上網查了一下undefined behavior
是否是指這樣的寫法並不在編譯器的規定內
所以在不同的編譯器上會有不同的答案
那是否以後應該改成
*ptr = *ptr + con
ptr++
就不會發生這種問題了
※ 編輯: cozychocolat (150.117.221.154), 04/10/2017 17:04:55
推
04/10 18:07, , 4F
04/10 18:07, 4F
不好意思,您是說在哪裡有定義
推
04/10 18:23, , 5F
04/10 18:23, 5F
這樣的確可正確執行,只是還是想知道是否是我的寫法出問題
→
04/10 19:48, , 6F
04/10 19:48, 6F
推
04/10 20:28, , 7F
04/10 20:28, 7F
若加括號後優先權最高
則執行邏輯是否變成
ptr ++
*ptr = *ptr +con
這樣結果我覺得應該是
3 15 17 19 21
但執行結果卻是
3 13 23 33 43
不管有沒有加括號 結果都為
3 13 23 33 43
這又是為什麼呢
※ 編輯: cozychocolat (150.117.221.154), 04/10/2017 21:05:26
推
04/10 21:27, , 8F
04/10 21:27, 8F
→
04/10 21:27, , 9F
04/10 21:27, 9F
→
04/10 21:28, , 10F
04/10 21:28, 10F
推
04/10 21:43, , 11F
04/10 21:43, 11F
推
04/10 21:45, , 12F
04/10 21:45, 12F
推
04/10 21:48, , 13F
04/10 21:48, 13F
→
04/10 22:24, , 14F
04/10 22:24, 14F
→
04/10 22:56, , 15F
04/10 22:56, 15F
→
04/10 22:57, , 16F
04/10 22:57, 16F
推
04/10 23:03, , 17F
04/10 23:03, 17F
推
04/10 23:25, , 18F
04/10 23:25, 18F
→
04/10 23:26, , 19F
04/10 23:26, 19F
→
04/10 23:26, , 20F
04/10 23:26, 20F
→
04/10 23:27, , 21F
04/10 23:27, 21F
→
04/10 23:28, , 22F
04/10 23:28, 22F
推
04/10 23:29, , 23F
04/10 23:29, 23F
→
04/10 23:29, , 24F
04/10 23:29, 24F
推
04/10 23:34, , 25F
04/10 23:34, 25F
推
04/11 10:17, , 26F
04/11 10:17, 26F
推
04/12 14:17, , 27F
04/12 14:17, 27F