*++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文章
31浏览量
6312 -
Printf
+关注
关注
0文章
84浏览量
14815
原文标题:*++p 和 ++*p
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
onsemi NTMD3P03和NVMD3P03 MOSFET:高性能双P沟道解决方案
了解一下安森美(onsemi)推出的NTMD3P03和NVMD3P03这两款双P沟道MOSFET,看看它们有哪些独特的特性和应用场景。 文件下载: NTMD3
Boost、Buck-Boost、Sepic拓扑有什么区别
工程师们在做电源设计时经常会有升压的需求,而常用的Boost、Buck-Boost、Sepic拓扑均可实现升压。这些拓扑有什么区别,该选哪个呢?
1P、1P+N与2P断路器的区别与应用
在家庭和工业用电系统中,断路器是保障电路安全的关键设备。常见的断路器类型包括1P、1P+N和2P,它们在结构、功能和应用场景上存在显著差异。正确选择断路器类型,不仅关系到用电安全,还影响系统的经济性和可靠性。本文将深入分析这三种
C语言指针p、*p、&p、*&p、&*p分别代表什么
在C语言中,指针是非常重要的概念。指针是一个变量,其值为另一个变量的地址。使用指针可以直接访问内存中的数据,这使得C语言非常灵活和强大。在学习C语言时相比大家都已经知道了 和*的区别了,但你知道
发表于 01-07 07:34
ESP32-P4全功能开发板和ESP32-P4-TINY开发板该怎么选?看这篇就够了!
启明云端基于乐鑫科技ESP32-P4芯片设计了多款开发板,这些开发板有什么区别?基于应用场景如何选择?本期,我们聚焦两款代表性产品:WT99P4C5-S1开发板与WT9932
微波雷达和毫米波雷达有什么区别
微波雷达和毫米波雷达有什么区别 前言:不知道大家有没有发现,各种雷达模块的使用开始逐渐加入各种智能家居产品了,像人来灯亮,人走灯灭这种雷达感应的产品早几年就开始进入市场了,还有各种感应开关等产品
浪涌保护器2P与1P+N的区别和行业应用详解
电气设备被击穿或损坏。随着配电系统的多样化和接地方式的不同,浪涌保护器出现了多种结构形式,其中以 2P型 与 1P+N型 最为常见。它们在外形、内部结构、保护原理以及应用场景上均存在显著差异。地凯防雷将系统分析两者的区别、参数含
*++p和++*p有什么区别?
评论