今天复习了一下C语言的指针题目,发现在很多代码结果题目中都出现了表达式*p++、**++p和++*p,而这几个表达式特别容易混淆。
那么通过什么方式区分他们呢,答案就是运算符优先级。
- *p++
++和 *(指针访问运算符)优先级相同,根据从右往左的结合性,因此等价于 *(p++),又因为后置++是先使用再自加,所以先取值 *p,然后再让p加1. - *++p
++和 *(指针访问运算符)优先级相同,根据从右往左的结合性,因此等价于 *(++p),也就是先让指针p加1,再取此时指针p的值。 - ++*p
++和 (指针访问运算符)优先级相同,根据从右往左的结合性,因此先取p的值p,然后再将值 *p加1。
可以将其做成表格
A= | 第一步 | 第二步 |
---|---|---|
*p++ | *p | p++ |
*++p | ++p | *(++p) |
++*p | *p | (*p)+1 |