当前位置:   article > 正文

【指针】*p++、(*p)++、*++p、++(*p)都是什么东西?_*p++!=‘b’

*p++!=‘b’

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

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

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

用代码直观展示一下:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a[5] = { 1,2,3,4,5 };
  5. int b[5] = { 1,2,3,4,5 };
  6. int c[5] = { 1,2,3,4,5 };
  7. int d[5] = { 1,2,3,4,5 };
  8. int* p1 = a;
  9. int* p2 = b;
  10. int* p3 = c;
  11. int* p4 = d;
  12. printf("指针p1:\n");
  13. printf("*p1++:%d \t\n", *p1++);
  14. printf("a[0]:%d \t\n", a[0]);
  15. printf("*p1:%d \t\n", *p1);
  16. printf("指针p2:\n");
  17. printf("(*p2)++:%d \t\n", (*p2)++);
  18. printf("b[0]:%d \t\n", b[0]);
  19. printf("*p2:%d \t\n", *p2);
  20. printf("指针p3:\n");
  21. printf("*++p3:%d \t\n", *++p3);
  22. printf("c[0]:%d \t\n", c[0]);
  23. printf("*p3:%d \t\n", *p3);
  24. printf("指针p4:\n");
  25. printf("++(*p4):%d \r\n", ++(*p4));
  26. printf("d[0]:%d \t\n", d[0]);
  27. printf("*p4:%d \t\n", *p4);
  28. system("pause");
  29. return 0;
  30. }

结果:

分析一下,首先是指针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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/79751
推荐阅读
相关标签
  

闽ICP备14008679号