`(*p)++`、`*(p++)`和`*p++`的区别主要在于它们的运算顺序和返回值不同。
1. `(*p)++`:
这个表达式首先解引用指针`p`,获取它所指向的值,然后将这个值加1。
运算顺序是先取值,再自增。
返回值是`p`所指向的原始值,然后该值自增1。
示例:如果`p`指向数组中的某个元素,`(*p)++`会先返回该元素的值,然后将该元素的值加1。
2. `*(p++)`:
这个表达式与`(*p)++`类似,也是先解引用指针`p`,获取它所指向的值,然后将指针`p`自增1。
运算顺序也是先取值,再自增。
返回值同样是`p`所指向的原始值,然后该值自增1。
示例:如果`p`指向数组中的某个元素,`*(p++)`会先返回该元素的值,然后指针`p`自增1,指向下一个元素。
3. `*p++`:
这个表达式先解引用指针`p`,获取它所指向的值,然后指针`p`自增1。
运算顺序是先取值,再自增。
返回值是`p`所指向的原始值,然后指针`p`自增1。
示例:如果`p`指向数组中的某个元素,`*p++`会先返回该元素的值,然后指针`p`自增1,指向下一个元素。
总结:
`(*p)++`和`*(p++)`以及`*p++`在运算顺序和返回值上是相同的,都是先取值,再自增。
它们的区别在于表达式的形式和可读性,`(*p)++`明确表明是先取值再自增,而`*(p++)`和`*p++`则可能让人误解为先自增再取值。
建议:
在实际编程中,为了代码的可读性和避免混淆,建议使用`(*p)++`来明确表示先取值再自增的操作。