*++p和++*p有什么区别?

描述

*++p 和 ++*p 有什么区别?

最近有同学在刷笔试题的时候,遇到这么一个问题。

#include 


int main()
{
    int array[5] = {0, 10, 20, 30, 40};
    int *p = array + 2;


    printf("%d
", *++p);
    printf("%d
", ++*p);


    return 0;
}
 先是一个数组,然后有个指针,赋值是 a + 2,所以 p 指向了元素20。

Printf  

最后是两个输出语句,就是刚才说的 *++p 和 ++*p。

区别这两个表达式,很多同学会想到优先级,先算什么再算什么,但是因为前置++和后置++本身就有一个先算和后算的问题,再结合优先级,容易乱。

*++p 因为是前置的++,前置的特点就是在执行这条语句之前变量的值加一,所以先进行 p 加一的操作,p 指向了30。

Printf  

然后再结合星号,取到的值是30。

换一种写法,可能更好理解一些:
p = p + 1;
printf("%d
", *p);
  ++*p 也是前置的++,只不过这次加的对象是*p,所以这个地方*p加不加括号结果都一样。
++*p;
++(*p);
p指向30,对30加一就变成了31。

两个输出语句,一个输出30,一个输出31。
root@Turbo:test# ./test 
30
31
root@Turbo:test#
自己写代码的时候,不建议写这样的代码,过于复杂,给别人理解造成困难,有时候换个编译器,可能结果也不一样。

如果把它拆成两行来写,理解起来就会容易得多。

最后,我再加上一行代码,这样写应该输出多少?
#include 


int main()
{
    int array[5] = {0, 10, 20, 30, 40};
    int *p = array + 2;


    printf("%d
", *++p);
    printf("%d
", ++*p);
    printf("%d
", *p++);


    return 0;
}
 





审核编辑:刘清
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分