本来就对指针搞不明白,看到这些东西头都大了,救命!

要想搞清他们是什么意思,首先需要知道*和++的优先级捏

  • *p++ :等效于*(p++),即先++,再*
  • (*p)++:先*,再++
  • *++p:先++,再*
  • ++(*p):先*,再++
  • p++为先参与程序运行再进行计算+1,++p为先计算+1再参与程序运行

用代码直观展示一下:

#includeint main(){int a[5] = { 1,2,3,4,5 };int b[5] = { 1,2,3,4,5 };int c[5] = { 1,2,3,4,5 };int d[5] = { 1,2,3,4,5 };int* p1 = a;int* p2 = b;int* p3 = c;int* p4 = d;printf("指针p1:\n");printf("*p1++:%d \t\n", *p1++); printf("a[0]:%d \t\n", a[0]); printf("*p1:%d \t\n", *p1); printf("指针p2:\n");printf("(*p2)++:%d \t\n", (*p2)++);printf("b[0]:%d \t\n", b[0]); printf("*p2:%d \t\n", *p2);printf("指针p3:\n");printf("*++p3:%d \t\n", *++p3);printf("c[0]:%d \t\n", c[0]);printf("*p3:%d \t\n", *p3);printf("指针p4:\n"); printf("++(*p4):%d \r\n", ++(*p4));printf("d[0]:%d \t\n", d[0]); printf("*p4:%d \t\n", *p4);system("pause");return 0;}

结果:

分析一下,首先是指针p1:

*p1++:先取指针p1指向的值 (a[0]),为1,然后再将指针自增1 (a[1])
a[0]:数组a第一个元素 (a[0]) 的值依然为1
*p1:指针p1指向了数组a第二个元素 (a[1]),变为2

指针p2:

(*p2)++:先取指针p2指向的值 (b[0]) 为1,然后再将该值加1 (b[0]=b[0]+1),注意p++为先printf再加1,所以输出为1
b[0]:数组b第一个元素 (b[0]) 的值变为2
*p2:指针p2依然指向b第一个元素 (b[0]),但是值变为2

指针p3:

*++p3:先将指针p3自增1 (指向第二个元素),然后再取指针所指向的值 (c[1]),为2
c[0]:数组c第一个元素 (c[0]) 的值依然为1
*p3:指针p3指向了数组a第二个元素 (c[1]),变为2

指针p4:

++(*p4):先取指针p4指向的值 (d[0]),再将该值加1 (d[0]=d[0]+1),注意++p为先加1再printf,所以输出为2
d[0]:数组d第一个元素 (d[0]) 的值变为2
*p4:指针p4依然指向数组d第一个元素 (d[0]),但是值变为2