C语言中*p++ ,(*p)++ ,*++p ,++*p的区别
-
*p++
---先取指针p指向的值(数组第一个元素),再将指针p自增1;
*号和++(单目运算)两个处于同一优先级,结合方向是自右向左,但是前提是当++在变量前面的时候才处理同一优先级,当++在变量之后时,++的优先级可以看成最低级的,比逗号运算符
的优先级还低。 -
(*p)++
---先取指针p指向的值(数组第一个元素),再将该值自增1; -
*++p
---先将指针p自增1(此时指向数组第二个元素),再取出该值; -
++*p
---先取指针p指向的值(数组第一个元素),再将该值自增1;#include<stdio.h> int Data[2] = {100,200}; int more[2] = {300,400}; int main(void) { int *p1,*p2,*p3; p1 = p2 = Data; p3 = more; printf("*p1 = %d, *p2 = %d, *p3 = %d\n",*p1,*p2,*p3); printf("*p1++ = %d, *++p2 = %d, (*p3)++ = %d\n",*p1++,*++p2,(*p3)++); printf("*p1 = %d, *p2 = %d, *p3 = %d\n",*p1,*p2,*p3); return 0; }
输出结果如下: *p1 = 100, *p2 = 100, *p3 = 300 *p1++ = 100, *++p2 = 200, (*p3)++ = 300 *p1 = 200, *p2 = 200, *p3 = 301
注:在数组中,指针自增1代表指针指向下一个元素