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

    浏览量

    6312
  • Printf
    +关注

    关注

    0

    文章

    84

    浏览量

    14815

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    onsemi NTMD3P03和NVMD3P03 MOSFET:高性能双P沟道解决方案

    了解一下安森美(onsemi)推出的NTMD3P03和NVMD3P03这两款双P沟道MOSFET,看看它们哪些独特的特性和应用场景。 文件下载: NTMD3
    的头像 发表于 04-19 11:00 172次阅读

    Boost、Buck-Boost、Sepic拓扑什么区别

    工程师们在做电源设计时经常会有升压的需求,而常用的Boost、Buck-Boost、Sepic拓扑均可实现升压。这些拓扑什么区别,该选哪个呢?
    的头像 发表于 04-11 14:14 927次阅读
    Boost、Buck-Boost、Sepic拓扑<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>

    如何电源管理电池供电和线路供电系统之间什么区别

    如何电源管理电池供电和线路供电系统之间什么区别
    发表于 04-06 08:24

    请问TJA1028DT/0 和 TJA1028x/5/20 什么区别

    TJA1028DT/0 和 TJA1028x/5/20 什么区别
    发表于 03-20 07:41

    1P、1P+N与2P断路器的区别与应用

    在家庭和工业用电系统中,断路器是保障电路安全的关键设备。常见的断路器类型包括1P、1P+N和2P,它们在结构、功能和应用场景上存在显著差异。正确选择断路器类型,不仅关系到用电安全,还影响系统的经济性和可靠性。本文将深入分析这三种
    的头像 发表于 03-05 17:08 1413次阅读

    C语言指针p、*p、&amp;p、*&amp;p、&amp;*p分别代表什么

    在C语言中,指针是非常重要的概念。指针是一个变量,其值为另一个变量的地址。使用指针可以直接访问内存中的数据,这使得C语言非常灵活和强大。在学习C语言时相比大家都已经知道了 和*的区别了,但你知道
    发表于 01-07 07:34

    行星减速机与齿轮减速机什么区别

    行星减速机与齿轮减速机什么区别
    的头像 发表于 01-04 16:30 1776次阅读
    行星减速机与齿轮减速机<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>?

    武汉芯源MCU和英飞凌MCU什么区别

    武汉芯源MCU和英飞凌MCU什么区别
    发表于 12-11 06:26

    ESP32-P4全功能开发板和ESP32-P4-TINY开发板该怎么选?看这篇就够了!

    启明云端基于乐鑫科技ESP32-P4芯片设计了多款开发板,这些开发板什么区别?基于应用场景如何选择?本期,我们聚焦两款代表性产品:WT99P4C5-S1开发板与WT9932
    的头像 发表于 12-09 18:02 1199次阅读
    ESP32-<b class='flag-5'>P</b>4全功能开发板和ESP32-<b class='flag-5'>P</b>4-TINY开发板该怎么选?看这篇就够了!

    请问jtag和jlink什么区别啊?

    jtag和jlink什么区别啊?
    发表于 11-28 06:46

    微波雷达和毫米波雷达什么区别

    微波雷达和毫米波雷达什么区别 前言:不知道大家有没有发现,各种雷达模块的使用开始逐渐加入各种智能家居产品了,像人来灯亮,人走灯灭这种雷达感应的产品早几年就开始进入市场了,还有各种感应开关等产品
    的头像 发表于 10-30 16:56 2224次阅读
    微波雷达和毫米波雷达<b class='flag-5'>有</b><b class='flag-5'>什么区别</b>

    浪涌保护器2P与1P+N的区别和行业应用详解

    电气设备被击穿或损坏。随着配电系统的多样化和接地方式的不同,浪涌保护器出现了多种结构形式,其中以 2P型 与 1P+N型 最为常见。它们在外形、内部结构、保护原理以及应用场景上均存在显著差异。地凯防雷将系统分析两者的区别、参数含
    的头像 发表于 10-11 15:25 1420次阅读
    浪涌保护器2<b class='flag-5'>P</b>与1<b class='flag-5'>P</b>+N的<b class='flag-5'>区别</b>和行业应用详解

    Re-Driver 和 Re-Timer 什么区别

    Re-Driver 和 Re-Timer 什么区别
    发表于 08-21 06:14

    使用ICP编程工具进行离线编程设置时,启用“使用密码”什么区别

    使用ICP编程工具进行离线编程设置时,启用“使用密码”什么区别
    发表于 08-19 06:04

    请问ST7701和ST7701S什么区别吗?

    ST7701和ST7701S什么区别
    发表于 07-22 08:16