看板 C_and_CPP 關於我們 聯絡資訊
最近碰上的面試問題 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
ddavid: 你講的是++p 03/15 20:50
Arim: 括號不是要先算嗎? 03/15 20:59
cuteSquirrel: p++代表先做事再累加。 03/15 21:55
pinefruit: 其實這邊不管有沒有括號,p++ 都會先算。 03/15 22:29
pinefruit: 但 p++ 的運算流程是: 1. 建立一份 p 的副本 03/15 22:29
pinefruit: 2. 遞增 p 的值 3. 回傳步驟 1 的副本 03/15 22:30
pinefruit: 所以 *(p++) 反參考到的其實是 p 在遞增前的副本。 03/15 22:30
cuteSquirrel: 正解 03/15 22:54
wei115: 先對p求值,再遞增p 03/16 08:29
alan23273850: 跟括號沒關係,p++ 就是取完再加的意思,所以加完 03/16 17:53
alan23273850: 的結果一定不會在這一句話呈現出來 03/16 17:53
newking761: 先給再加阿。。。。。 03/20 13:49
newking761: 這個不是最基礎的嗎?這都不會,面試官484哭出來 03/20 13:50
pl168959903: 你這樣面試很危險啊。。。。 03/22 23:30