[問題] 指標問題

作者: Arim (象山下智久)   2021-03-15 20:41:10
最近碰上的面試問題
char s[] = "1234567";
char *p = s;
printf("%c", *(p++));
印出來是 1
但我預期應該是 2,先移動到下一個位置(++),然後取值
請問原因是?
作者: ddavid (謊言接線生)   2021-03-15 20:50:00
你講的是++p
作者: Arim (象山下智久)   2021-03-15 20:59:00
括號不是要先算嗎?
作者: cuteSquirrel (松鼠)   2021-03-15 21:55:00
p++代表先做事再累加。
作者: pinefruit (莫使惹塵埃)   2021-03-15 22:29:00
其實這邊不管有沒有括號,p++ 都會先算。但 p++ 的運算流程是: 1. 建立一份 p 的副本2. 遞增 p 的值 3. 回傳步驟 1 的副本所以 *(p++) 反參考到的其實是 p 在遞增前的副本。
作者: cuteSquirrel (松鼠)   2021-03-15 22:54:00
正解
作者: wei115 (ㄎㄎ)   2021-03-16 08:29:00
先對p求值,再遞增p
作者: alan23273850   2021-03-16 17:53:00
跟括號沒關係,p++ 就是取完再加的意思,所以加完的結果一定不會在這一句話呈現出來
作者: newking761 (J三小)   2021-03-20 13:49:00
先給再加阿。。。。。這個不是最基礎的嗎?這都不會,面試官484哭出來
作者: pl168959903   2021-03-22 23:30:00
你這樣面試很危險啊。。。。

Links booklink

Contact Us: admin [ a t ] ucptt.com