如题所述
(*s++) 解引后得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移s++ 即s指针往后偏移*s++ 。
1、编译器解析到*,判断为指针运算符号,需要一个标示符或者表达式;
2、解析到s,是一个合法的标示符,继续搜索是否有更高优先级的运算符;
3、继续解析到++,由于*与++是同一优先级,结合性为右到左,所以等同于*(s++);
4、然后是=,判断为赋值运算符,优先级比++低,因此前面的部分可以直接进行计算。
*与++的优先级相同,结合性都是从右向左,()优先级大于*与++
假定 int a=0,*s=&a;
*s++等价于*(s++) 是 指针 在自增,结果取得指针所指数据,再s+1
//执行后 a=0,s=s+1 (指针指向别的地址)
(*s)++ 是 指针所指数据 在自增,结果取得指针所指数据,再指针所指数据+1
//执行后 a=1,s=&a
s++ 指针自增,不在指向变量a