[問題] *ptr++ = *ptr++ + 123; 之evaluation

看板C_and_CPP作者 (你今天浪費時間了嗎?)時間11年前 (2014/03/06 03:22), 編輯推噓1(107)
留言8則, 5人參與, 最新討論串1/1
程式碼(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

03/06 04:31, , 1F
置底第八戒: ptr 在同個 expression 內改值兩次, 行為未定義
03/06 04:31, 1F

03/06 07:50, , 2F
為啥要這樣寫..分兩三行就好了...
03/06 07:50, 2F

03/06 21:53, , 3F
這什麼鬼程式
03/06 21:53, 3F

03/07 09:58, , 4F
又是哪間公司考的白癡題目? 最好是上班敢這樣寫
03/07 09:58, 4F

03/07 09:59, , 5F
想法同2F... 分兩三行就好了. C code短又不代表機器碼一
03/07 09:59, 5F

03/07 10:00, , 6F
定短... 寫這種沒啥閱讀性的Code害人害己
03/07 10:00, 6F

03/07 13:58, , 7F
真的是阿鬼程式XD 我要的答案應該就是1F的 就是未定義
03/07 13:58, 7F

03/07 13:58, , 8F
謝謝!
03/07 13:58, 8F
文章代碼(AID): #1J5tbXtY (C_and_CPP)