0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

学益得智能硬件 来源:学益得智能硬件 2023-10-30 11:15 次阅读

*++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。

49c12eba-76d2-11ee-939d-92fbcf53809c.png  

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

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

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

49d3da74-76d2-11ee-939d-92fbcf53809c.png  

然后再结合星号,取到的值是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;
}






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

    关注

    0

    文章

    31

    浏览量

    5899
  • Printf
    +关注

    关注

    0

    文章

    83

    浏览量

    13672

原文标题:*++p 和 ++*p

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ads1292和ads1292R之间什么区别

    1、导联线连接上,社区内有两种不同的用法,不知什么区别?见下图 上图是TI评估板上给的 上图是社区内一位大哥给的 对比一下第一张图 IN2P连接到了ELL而第二张图IN2P连接
    发表于 12-20 12:56

    PHP48_4P9X4P9,PHP48_4P9X4P9-L,PHP48_4P9X4P9-M,这三种封装除了焊盘的长度不同还有什么区别呢?

    PHP48_4P9X4P9,PHP48_4P9X4P9-L,PHP48_4P9X4P9-M,这三种封装的区别除了焊盘的长度不同还有什么区别
    发表于 11-28 06:34

    RTOS与Linux到底什么区别

    很多做嵌入式开发的小伙伴都存在这样的疑惑:RTOS与Linux到底什么区别
    的头像 发表于 10-29 09:53 469次阅读

    PCM2912和PCM2912A什么区别

    我在其代理商买了些PCM2912,芯片上丝印为:P2912AE4 34A57CT G4,请问下和PCM2912A什么区别?我在其手册上没发现有这后缀 按手册上推荐电路焊了片调试,发现: 按
    发表于 10-21 06:47

    6p1单端与6p1推挽区别

    6P1单端与6P1推挽在电子管功放领域中确实存在显著的区别,这些区别主要体现在电路结构、工作原理、性能特点以及适用场景等方面。以下是对两者的比较: 一、电路结构 6
    的头像 发表于 10-09 17:33 852次阅读

    N沟道场效应管和P沟道场效应管有什么区别

    , P-Channel FET)是场效应管(Field Effect Transistor, FET)的两种基本类型,它们在导电机制、极性、驱动电压、导通电阻、噪声特性、温度特性以及应用领域等方面存在显著差异。以下是对这两种场效应管区别的详细阐述:
    的头像 发表于 09-23 16:38 1901次阅读

    INA129AG与INA129P或INA129U什么区别

    请问INA129AG与INA129P或INA129U什么区别
    发表于 08-30 07:13

    请问ESPTOUCH和AIRKISS什么区别

    请问ESPTOUCH和AIRKISS什么区别?谢谢!
    发表于 07-12 12:44

    RV 和ARM什么区别

    district RV 和ARM什么区别
    发表于 06-26 12:41

    无源电压探头P2220和P2221的区别是什么?

    问题: 泰克无源探头P2220和P2221的区别是什么? 答: P2220和P2221之间的唯一区别
    的头像 发表于 03-11 13:36 621次阅读
    无源电压探头<b class='flag-5'>P</b>2220和<b class='flag-5'>P</b>2221的<b class='flag-5'>区别</b>是什么?

    线路板的层和阶什么区别

    线路板的层和阶什么区别
    的头像 发表于 02-23 17:27 745次阅读

    TC397多核之间数据访问效率什么区别?本地和全局的效率什么区别

    TC397多核之间数据访问效率什么区别,本地和全局的效率什么区别,可不可以将电机同步ADC采集放到主核0,算法在1核执行
    发表于 02-06 07:42

    SPI和QSPI什么区别

    SPI和QSPI什么区别
    发表于 02-06 06:12

    求助,TC275中不同的STEP什么区别

    TC275中不同的STEP什么区别?我看了一些芯片CA-STEP,DB-STEP,DC-STEP这几个step什么区别呢?或者从哪个手
    发表于 02-04 07:34

    泰克P6139A和P6139B示波器无源探头什么区别?

    问题 : P6139A和P6139B示波器无源探头什么区别? 回答 : 从规格角度来看,探头是相同的。两者都是 500 MHz、10X 无源探头。
    的头像 发表于 01-12 11:02 563次阅读
    泰克<b class='flag-5'>P</b>6139A和<b class='flag-5'>P</b>6139B示波器无源探头<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?