[问题] 指标问题

楼主: 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