指针与++

“++”和“--”两个运算符都属于算术运算符。++和--又有前缀、后缀的区别,++a的++属于前缀,a++的++属于后缀,后缀++是Postfix    operator,结合顺序为从右向左;前缀++是Prefix    operator,结合顺序为从左向右。后缀的优先级高于前缀的优先级。

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

}

你可能感兴趣的:(指针与++)