[問題] 指標問題

看板C_and_CPP (C/C++)作者 (億載金城武)時間3年前 (2021/03/15 20:41), 編輯推噓5(506)
留言11則, 6人參與, 3年前最新討論串13/13 (看更多)
最近碰上的面試問題 char s[] = "1234567"; char *p = s; printf("%c", *(p++)); 印出來是 1 但我預期應該是 2,先移動到下一個位置(++),然後取值 請問原因是? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.24.33 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1615812073.A.2FE.html

03/15 20:50, 3年前 , 1F
你講的是++p
03/15 20:50, 1F

03/15 20:59, 3年前 , 2F
括號不是要先算嗎?
03/15 20:59, 2F

03/15 21:55, 3年前 , 3F
p++代表先做事再累加。
03/15 21:55, 3F

03/15 22:29, 3年前 , 4F
其實這邊不管有沒有括號,p++ 都會先算。
03/15 22:29, 4F

03/15 22:29, 3年前 , 5F
但 p++ 的運算流程是: 1. 建立一份 p 的副本
03/15 22:29, 5F

03/15 22:30, 3年前 , 6F
2. 遞增 p 的值 3. 回傳步驟 1 的副本
03/15 22:30, 6F

03/15 22:30, 3年前 , 7F
所以 *(p++) 反參考到的其實是 p 在遞增前的副本。
03/15 22:30, 7F

03/15 22:54, 3年前 , 8F
正解
03/15 22:54, 8F

03/16 08:29, 3年前 , 9F
先對p求值,再遞增p
03/16 08:29, 9F

03/16 17:53, 3年前 , 10F
跟括號沒關係,p++ 就是取完再加的意思,所以加完
03/16 17:53, 10F

03/16 17:53, 3年前 , 11F
的結果一定不會在這一句話呈現出來
03/16 17:53, 11F
文章代碼(AID): #1WJrNfB- (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1WJrNfB- (C_and_CPP)