1、*p++ 与 *(p++)的区别
因为“++”的优先级大于“*”,所以*p++ 相当于*(p++)。
但是p++表示先运算再++,所以*p++或者*(p++),其实等价于“先(*p),然后再p++”。
注意,“先(*p),然后再p++”不能表示成“ (*p)++”,因为(*p)表示常量,不存在“常量++”的表示方法。(*p)++这种表示方式是错误的。
2、*++p 与 *(++p)的区别
由于“++”的优先级大于“*”,所以两者的含义是一样的。
表示先p++,此时p指针已经移动至下一个位置;然后再*,表示p指针移动之后所指向的值。
代码示例
#include<stdio.h>
#include<stdlib.h>int main(void)
{char *p = "abcdef";char c;//分别运行/*c = *p++;printf("%c\n", c);//aprintf("%c\n",*p);//b*/c = *(p++);printf("%c\n", c);//aprintf("%c\n",*p);//b/*//这种写法是错误的,换句话说,(*p)是一个常量,没有“常量++”的写法c = (*p)++;printf("%c\n", c);printf("%c\n",*p);*//*c = *++p;printf("%c\n", c);//bprintf("%c\n", *p);//b*//*c = *(++p);printf("%c\n", c);//bprintf("%c\n", *p);//b*//*//这种写法是错误的,没有这种写法。c = ++(*p);//c = ++*p;也是错误的。printf("%c\n", c);//bprintf("%c\n", *p);//b*/getchar();return 0;
}