作者Arim (億載金城武)
看板C_and_CPP
標題[問題] 指標問題
時間Mon Mar 15 20:41:10 2021
最近碰上的面試問題
char s[] = "1234567";
char *p = s;
printf("%c", *(p++));
印出來是 1
但我預期應該是 2,先移動到下一個位置(++),然後取值
請問原因是?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.24.33 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1615812073.A.2FE.html
1F:推 ddavid: 你講的是++p 03/15 20:50
2F:→ Arim: 括號不是要先算嗎? 03/15 20:59
3F:推 cuteSquirrel: p++代表先做事再累加。 03/15 21:55
4F:推 pinefruit: 其實這邊不管有沒有括號,p++ 都會先算。 03/15 22:29
5F:→ pinefruit: 但 p++ 的運算流程是: 1. 建立一份 p 的副本 03/15 22:29
6F:→ pinefruit: 2. 遞增 p 的值 3. 回傳步驟 1 的副本 03/15 22:30
7F:→ pinefruit: 所以 *(p++) 反參考到的其實是 p 在遞增前的副本。 03/15 22:30
8F:→ cuteSquirrel: 正解 03/15 22:54
9F:推 wei115: 先對p求值,再遞增p 03/16 08:29
10F:推 alan23273850: 跟括號沒關係,p++ 就是取完再加的意思,所以加完 03/16 17:53
11F:→ alan23273850: 的結果一定不會在這一句話呈現出來 03/16 17:53
12F:推 newking761: 先給再加阿。。。。。 03/20 13:49
13F:→ newking761: 這個不是最基礎的嗎?這都不會,面試官484哭出來 03/20 13:50
14F:→ pl168959903: 你這樣面試很危險啊。。。。 03/22 23:30