C语言中(*s++)、s++、*s++之间有什么区别?

如题所述

(*s++) 解引后得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移s++ 即s指针往后偏移*s++ 。

1、编译器解析到*,判断为指针运算符号,需要一个标示符或者表达式;

2、解析到s,是一个合法的标示符,继续搜索是否有更高优先级的运算符;

3、继续解析到++,由于*与++是同一优先级,结合性为右到左,所以等同于*(s++);

4、然后是=,判断为赋值运算符,优先级比++低,因此前面的部分可以直接进行计算。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-22

*与++的优先级相同,结合性都是从右向左,()优先级大于*与++

假定 int a=0,*s=&a;

*s++等价于*(s++)     是 指针 在自增,结果取得指针所指数据,再s+1

//执行后 a=0,s=s+1 (指针指向别的地址)

(*s)++  是 指针所指数据 在自增,结果取得指针所指数据,再指针所指数据+1

//执行后 a=1,s=&a

s++  指针自增,不在指向变量a

第2个回答  2019-11-05
楼上错了,前面的s如果是变量就是值加1,如果是指针就是地址加1,后面这个是地址加1而不是指向的内容加1,因为++的优先级高于*,但是注意两者都是事后加!,也就是说如果是a=*s++的话那么是先将*s的值赋给a然后地址再加1,s++也是一样的。
第3个回答  2019-10-15
s是指针变量吗
假设s是指针变量,(*s++)就是s包含的指针指向的内存空间的值加一。
s++则是表示加上s的基类型占用的字节数,例如s是int类型的,占4个字节,s++就是其值加4个字节。
*s++的意义和第一个相同