作者rnbjacky (你今天浪費時間了嗎?)
看板C_and_CPP
標題[問題] *ptr++ = *ptr++ + 123; 之evaluation
時間Thu Mar 6 03:22:05 2014
程式碼(Code):(請善用置底文網頁, 記得排版)
int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
*ptr++ = *ptr++ + 123;
*(++ptr) = *(++ptr) + 123;
int *p = arr;
int *q = arr + sizeof(arr)/sizeof(*arr);
while( p != q )
cout << *p++ << " "; // 129 7 8 9 133
關於這段程式碼中
*ptr++ = *ptr++ + 123;
請問有版上的大大知道這行的底下運作嗎?
我的問題是不懂為什麼前面的increment沒有影響後面的dereference結果
(或是後面的increment沒有影響前面)
為什麼這行右邊的是拿6的值, 左邊也是更新6的位置
最後才把位置更新到8
感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.226.188.141
→ scwg:置底第八戒: ptr 在同個 expression 內改值兩次, 行為未定義 03/06 04:31
推 steve1012:為啥要這樣寫..分兩三行就好了... 03/06 07:50
→ diabloevagto:這什麼鬼程式 03/06 21:53
→ samuelcdf:又是哪間公司考的白癡題目? 最好是上班敢這樣寫 03/07 09:58
→ samuelcdf:想法同2F... 分兩三行就好了. C code短又不代表機器碼一 03/07 09:59
→ samuelcdf:定短... 寫這種沒啥閱讀性的Code害人害己 03/07 10:00
→ rnbjacky:真的是阿鬼程式XD 我要的答案應該就是1F的 就是未定義 03/07 13:58
→ rnbjacky:謝謝! 03/07 13:58