char a[]={10,20};
char *p,b;
p=&a[0];//将数组a[0]的地址赋给p
b=*p++,其中++属于后缀,所以优先级高于*,相当于b= (*(p++)),也就是说++操作于p上,可以分解为b=*p;p++;总的作用就是b=10 ,p指向地址2001;a[0]和a[1]不变。
b=(*p)++,强制改变优先级,先进行(*p)运算,其结果为p引用的对象,可以分解为b=(*p);(*p)++;总的作用就是b=10,a[0]=11,p指向地址2000;
b=*++p,相当于b=(*(++p)),也就是说++操作于p上,结果为p加1后的值,再作*运算,可以分解为++p;b=*()。总的作用就是p指向地址2001,b=20,a[0]和a[1]不变。
b=++*p,相当于b=(++(*p)) ,也就是说先对p作*运算,其结果为p引用的对象,再++把这个对象+1,总的作用就是a[0]=11,b=11,p指向2000;
#include
#include
void main()
{
char s[]="abcdef",*c=s;
printf("原数组%s\n",c); //abcdef
c+=3;
printf("c+3后指向%c\n",*c); //d
*(c--)=*(c-1); //将c-1的值赋给c,然后c--指向原先c-1的位置
printf("赋值后c指向%c\n",*c); //第一个c
printf("运算后c后数组%s",c); //ccef
printf("运算后整个数组%s",s); //abccef
}