(*s++) 解引后得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移s++ 即s指针往后偏移*s++ 。
1、编译器解析到*,判断为指针运算符号,需要一个标示符或者表达式;
2、解析到s,是一个合法的标示符,继续搜索是否有更高优先级的运算符;
3、继续解析到++,由于*与++是同一优先级,结合性为右到左,所以等同于*(s++);
4、然后是=,判断为赋值运算符,优先级比++低,因此前面的部分可以直接进行计算。
(*s++) 解引用得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移
s++ 就s指针往后偏移
*s++ 解引用得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移。和第一个一样。
(*s)++ 解引用得到s指向位置的值,然后将该值做自加,新值作为表达式的结果值
前面3处的++都是作用在指针上,也就是地址上
最后1个++是作用在指针指向地址上的数值上
(*s++)与*s++根本就是一样的呀。 是不是*(s++)呀
s++是指地址偏移,偏移一个类型的字节,假如s是int的指针,那就偏移4个字节,数组的话就相当于移到下一个元素。
*是解除引用,就是得到该指针所存储地址对应的值。
*(s++)与*s++主要是优先级的问题了。因为*的优先级高于++ 而又低于()
所以*(s++)是先发生地址偏移,再解引用得到值
*s++则是先对s解除引用,然后再发生地址偏移。(这里不知是解除引用后发生地址偏移还是对*s后的值+1)
当*为乘法时,++优先级大于*;但是当*为指针时,它们优先级相同,结合方向为从右往左,
*s++等价于*(s++)
例:*s++=e指先把e赋给*s,再s=s+1(指针s指向下一个)。
*++s=e指先s=s+1(指针s指向下一个),再把e赋给*s。
(*s++):求出当前指针所指对象值后指针指向下一个存储单元
s++:把当前指针所指地址赋值后指针指向下一个存储单元
*s++:跟(*s++)同一个意思