将*和++同时应用于指针时,将什么解除引用,将什么递增呢?
这取决于运算符的位置和优先级。
前缀递增、前缀递减和解除引用运算符的优先级相同,以从右到左的方式结合;
后缀递增、后缀递减的优先级相同,且比前缀运算符的优先级高,以从左到右的方式结合。
举例:
形如*++p,因为前缀运算符和解除引用从右到左结合:所以先将++应用于p,然后将*应用于被递增后的pt。(因为 ++ 位于 * 的右边)
另一方面,++*p意味着先取得pt指向的值,然后将这个值加1.
(*p)++:同样代表着首先对指针解除引用,然后将解除引用后得到的值递增。
举例:* p++:由于后缀运算符比前缀运算符的优先级更高,所以++首先应用于p,也就是指针先递增1,但是需要注意的是,后缀运算本身含义就是先运算后增加1(运算指的是p++作为一个整体与前面的 * 进行运算;增加1指的是p+1)。
所以实际上* p++符号整体对外表现的值是*p的值,运算完成后p再加1.