考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

这篇具有很好参考价值的文章主要介绍了考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 来,猜猜看,这里的执行结果是什么?

考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

这是今天课上的一道理解题,给大家一点点思考时间。

(心里有答案了再往下滑哦) 

5

4

3

2

1

.

答案是报warning!

考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

因为%p才是用来输出地址的哈哈。

不过如果忽略warning呢?

那么最终答案是:5 

为什么是 5?

1 + 1 = 5?

哈哈别急,让我们来进行一些简单的实验。

#include<stdio.h>
int main()
{
    printf("%d\n", (int *)1 + 1); // 输出5

  //接下来把%d改为%p,输出地址
    printf("%p\n", (int *)1 + 1); // 输出0x5

    printf("%p\n", (int *)1 + 2); // 输出0x9

    printf("%p\n", (int *)2 + 1); // 输出0x6
     
    printf("%p\n", (int *)2 + 2); // 输出0xa

    printf("%p\n", (int *) (1 + 1) ); // 输出0x2

    return 0 ;
} 

多实验几次就会明显发现,

第一个数每+1地址增加1,

第二个数每+1地址就增加4,

而(int*)(1+1) 也就是(int*)2,指向的就是地址2,

所以,系统应该是先执行(int*)1,将指针指向地址1,然后再执行+1,使指针指向当前地址的下一个位置,因为int占4个字节所以指针每次跳4个,所以最终指向1+4,也就是地址5的位置。

(如果将int改为其他类型也是同样:)

#include<stdio.h>
int main()
{
    printf("%d\n", (int *)1 + 1); //int 占4字节,输出5
 
    printf("%d\n", (short *)1 + 1); //short 占2字节,输出3

    printf("%d\n", (long long i*)1 + 1); //long long 占8字节,输出9

    return 0 ;
} 

以上是我的个人理解,欢迎大佬们前来赐教~文章来源地址https://www.toymoban.com/news/detail-429369.html

到了这里,关于考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CrossOver22试用期到了如何免费使用?

    苹果电脑CrossOver试用期到了该怎么办?初次在苹果电脑下载安装CrossOver会有14天的免费试用,试用结束后便无法再通过CrossOver下载Windows应用程序了。苹果电脑CrossOver怎么使用?CrossOver主要有三个步骤分别是(1)选择应用;(2)选择安装包;(3)创建容器,开始安装应用程序

    2024年02月07日
    浏览(68)
  • 阿里二面:如何定位&避免死锁?连着两个面试问到了!

    在面试过程中,死锁是必问的知识点,当然死锁也是我们日常开发中也会遇到的一个问题,同时一些业务场景例如库存扣减,银行转账等都需要去考虑如何避免死锁,一旦线上发生了死锁,那可能年终不保。。。。。下面我们就来聊一聊死锁如何定位,以及如何避免。 死锁(

    2024年03月13日
    浏览(45)
  • ChatGPT神奇应用:无需美术功底快速生成高清艺术插图

    正文共 1410 字,阅读大约需要 8 分钟 创意人群的最佳助手,您将在8分钟后获得以下超能力: 1.高清艺术类插图【非人物】 2.多风格高效出图 Beezy评级:A级 *经过寻找和一段时间的学习,一部分人能掌握。主要提升效率并增强自身技能。 推荐人 |Yolanda 编辑者 | Ramy ●此图片是

    2024年02月09日
    浏览(46)
  • 深入理解CommonJS和ES Module? 优缺点?什么时候用?

    在webpack中,我们可以使用多种模块化方式,如CommonJS和ES Module。 CommonJS是什么? CommonJS是一种模块化规范,它是Node.js采用的模块化规范,它的主要特点是同步加载模块,模块输出的是一个值的拷贝,而不是引用。CommonJS的优点是简单易用,可以在服务器端和客户端使用,缺点

    2024年02月03日
    浏览(42)
  • 《繁花》中服饰公司的股票开盘价如何涨到了18.8

    《繁花》中服饰公司的股票发行价是5块4一股,怎么就被强慕杰搞成了18.88一股的所谓开盘价呢? 股市里的股票其实和菜市场的白菜一样,发行价只是官方指导价,你实际能用多少钱在市面上买到,得看大家觉得它多少钱。或者愿意出多少钱卖给你。就像你很难用1499官方指导

    2024年01月22日
    浏览(70)
  • 计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程。 要理解卷积神经网络中图像特征提取的全过程,我们可以将其比喻为人脑对视觉信息的处理过程。就像我们看到一个物体时,大脑会通

    2024年02月10日
    浏览(46)
  • 彻底理解数组指针和指针数组的区别

    数组指针和指针数组有什么区别? 数组指针: 本质是一个指针,指向了一个数组 ,数组中的每个元素都是某种数据类型的值(比如 int 类型)。 数组指针也称 行指针 ,也就是说,当指针p执行p+1时,指针会指向数组的下一行,如: 指针数组: 本质是一个数组,该数组中的

    2024年02月02日
    浏览(50)
  • 如何确定NetApp FAS存储系统是否正常识别到了boot device?

    近期处理了几个NetApp FAS存储控制器宕机的案例,其中部分有代表性的就是其实控制器并没有物理故障,问题是控制器里面的boot device的SSD盘出现了问题。这里给大家share一下如何确定系统是否成功识别到了boot device设备。 对于很多非专业人士来说,看到NetApp的一个控制器take

    2023年04月16日
    浏览(58)
  • 全面理解C++函数最难理解的部分:数组形参,函数指针,以及函数指针作为形参

    我提到的这些部分,是我在自学C与C++中遇到的比较困难的点。因为初学者的编程,不太容易使用到这些点,所以很容易造成遗忘,并且自己写很容易出错。 最近在看标准C库的源码的时候遇到了这样的困惑,就是关于函数指针,或者说,把一个函数作为另一个函数的参数的这

    2024年02月07日
    浏览(39)
  • 进一步了解C++函数的各种参数以及重载,了解C++部分的内存模型,C++独特的引用方式,巧妙替换指针,初步了解类与对象。满满的知识,希望大家能多多支持

    C++的编程精华,走过路过千万不要错过啊!废话少说,我们直接进入正题!!!! 函数默认参数 在C++中,函数的形参列表中的形参是可以有默认值的。 语法 : 返回值类型 函数名 (参数 = 默认值){} 示例 : 函数占位参数 C++中函数的形参列表里可以有占位参教,用来做占位

    2023年04月17日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包