*++p 和 ++*p 有什么区别?
最近有同学在刷笔试题的时候,遇到这么一个问题。
#include先是一个数组,然后有个指针,赋值是 a + 2,所以 p 指向了元素20。int main() { int array[5] = {0, 10, 20, 30, 40}; int *p = array + 2; printf("%d ", *++p); printf("%d ", ++*p); return 0; }
最后是两个输出语句,就是刚才说的 *++p 和 ++*p。
区别这两个表达式,很多同学会想到优先级,先算什么再算什么,但是因为前置++和后置++本身就有一个先算和后算的问题,再结合优先级,容易乱。
*++p 因为是前置的++,前置的特点就是在执行这条语句之前变量的值加一,所以先进行 p 加一的操作,p 指向了30。
然后再结合星号,取到的值是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#自己写代码的时候,不建议写这样的代码,过于复杂,给别人理解造成困难,有时候换个编译器,可能结果也不一样。
如果把它拆成两行来写,理解起来就会容易得多。
最后,我再加上一行代码,这样写应该输出多少?
#includeint main() { int array[5] = {0, 10, 20, 30, 40}; int *p = array + 2; printf("%d ", *++p); printf("%d ", ++*p); printf("%d ", *p++); return 0; }
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
printf函数
+关注
关注
0文章
30浏览量
5827 -
Printf
+关注
关注
0文章
79浏览量
13481
原文标题:*++p 和 ++*p
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
RDMA和TCP/IP有什么区别
在分布式存储网络中,我们使用的协议有RoCE、Infiniband(IB)和TCP/IP。其中RoCE和IB属于RDMA (RemoteDirect Memory Access)技术,他和传统的TCP/IP有什么区别呢,接下来我们将做详细对比。
基频晶振和泛音晶振在电路中的使用有什么区别
我们只知道晶振是一种频率元器件,而对于晶振有分基频晶振和泛音晶振的人可能少之又少。那么什么是基频晶振,什么又是泛音晶振了,两种在电路中的使用有什么区别了。
chiplet和soc有什么区别?
chiplet和soc有什么区别? 随着技术的不断发展,芯片设计也在快速演变。而在芯片设计理念中,目前最常见的概念是"system-on-a-chip (SoC)"和"chiplet"。 对于业界
航空插头芯数有什么区别
随着现代航空的飞速发展,航空设备的应用也越来越广泛。在航空设备中,航空插头是不可或缺的一部分。而对于航空插头的芯数,很多人可能不太了解。那么,航空插头芯数有什么区别呢?接下来,本文将详细介绍航空插头芯数的区别。
评论