作者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/cn.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