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

    文章

    30

    浏览量

    5827
  • Printf
    +关注

    关注

    0

    文章

    79

    浏览量

    13481

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

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

收藏 人收藏

    评论

    相关推荐

    线路板的层和阶有什么区别

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

    hdi板与普通pcb有什么区别

    hdi板与普通pcb有什么区别
    的头像 发表于 12-28 10:26 871次阅读

    pcb软板和硬板有什么区别

    pcb软板和硬板有什么区别
    的头像 发表于 12-19 10:01 723次阅读

    RDMA和TCP/IP有什么区别

    在分布式存储网络中,我们使用的协议有RoCE、Infiniband(IB)和TCP/IP。其中RoCE和IB属于RDMA (RemoteDirect Memory Access)技术,他和传统的TCP/IP有什么区别呢,接下来我们将做详细对比。
    的头像 发表于 11-30 09:19 724次阅读
    RDMA和TCP/IP有<b class='flag-5'>什么区别</b>

    薄膜电阻和厚膜电阻有什么区别

    电子发烧友网站提供《薄膜电阻和厚膜电阻有什么区别.doc》资料免费下载
    发表于 11-21 09:24 0次下载
    薄膜电阻和厚膜电阻有<b class='flag-5'>什么区别</b>

    三极管和MOS管做开关用的时候有什么区别

    电子发烧友网站提供《三极管和MOS管做开关用的时候有什么区别.doc》资料免费下载
    发表于 11-14 10:07 0次下载
    三极管和MOS管做开关用的时候有<b class='flag-5'>什么区别</b>

    基频晶振和泛音晶振在电路中的使用有什么区别

    我们只知道晶振是一种频率元器件,而对于晶振有分基频晶振和泛音晶振的人可能少之又少。那么什么是基频晶振,什么又是泛音晶振了,两种在电路中的使用有什么区别了。
    的头像 发表于 10-17 16:40 316次阅读

    chiplet和soc有什么区别

    chiplet和soc有什么区别? 随着技术的不断发展,芯片设计也在快速演变。而在芯片设计理念中,目前最常见的概念是"system-on-a-chip (SoC)"和"chiplet"。 对于业界
    的头像 发表于 08-25 14:44 1560次阅读

    fork和vfork有什么区别 简述fork与vfork的区别

    fork和vfork有什么区别,作为嵌入式工程师,这个肯定是要掌握的。
    的头像 发表于 08-03 17:12 1084次阅读
    fork和vfork有<b class='flag-5'>什么区别</b> 简述fork与vfork的<b class='flag-5'>区别</b>

    type-c和普通接口有什么区别呢?

      随着type-c接口的普及,现在越来越多的电子产品都使用了type-c接口,那么,type-c和普通接口有什么区别呢?
    的头像 发表于 07-28 11:17 4753次阅读
    type-c和普通接口有<b class='flag-5'>什么区别</b>呢?

    EML与DML:有什么区别?该如何选择?

    DML和EML有什么区别?该如何选择?本文将回答这些问题。
    的头像 发表于 06-30 10:43 1422次阅读
    EML与DML:有<b class='flag-5'>什么区别</b>?该如何选择?

    Vivado Schematic中的实线和虚线有什么区别

    Vivado Schematic中的实线和虚线有什么区别
    的头像 发表于 06-16 16:53 762次阅读
    Vivado Schematic中的实线和虚线有<b class='flag-5'>什么区别</b>?

    航空插头芯数有什么区别

    随着现代航空的飞速发展,航空设备的应用也越来越广泛。在航空设备中,航空插头是不可或缺的一部分。而对于航空插头的芯数,很多人可能不太了解。那么,航空插头芯数有什么区别呢?接下来,本文将详细介绍航空插头芯数的区别
    的头像 发表于 06-15 12:54 1899次阅读
    航空插头芯数有<b class='flag-5'>什么区别</b>

    Vivado Schematic中的实线和虚线有什么区别

    Vivado Schematic中的实线和虚线有什么区别
    的头像 发表于 06-06 11:13 733次阅读
    Vivado Schematic中的实线和虚线有<b class='flag-5'>什么区别</b>?

    有铅中温锡膏和无铅中温锡膏有什么区别?

    锡膏熔点之间的锡膏,因此称为中温锡膏,但实际上两款锡膏还是有很多的不同点的,那么有铅中温锡膏和无铅中温锡膏都有些什么区别
    的头像 发表于 05-24 11:03 1175次阅读
    有铅中温锡膏和无铅中温锡膏有<b class='flag-5'>什么区别</b>?