C指针相减

源代码:

int array[] = {1,2,3};
int *p = array;
int *q = array + 2;
int v = q - p;

汇编:

...
;从栈上取指针q的地址赋值给rax
0x100003f32 <+82>:  movq   -0x38(%rbp), %rax
;从栈上取指针p的地址赋值给rdx
0x100003f36 <+86>:  movq   -0x30(%rbp), %rdx
;rax-rdx结果赋值给rax. 这里rax等于0x8
0x100003f3a <+90>:  subq   %rdx, %rax
;rax算术右移2位,结果赋值给rax. 这里rax就是2
0x100003f3d <+93>:  sarq   $0x2, %rax
...

两个整型指针相减,结果是: 地址值差值 / sizeof(int)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 什么是类?答:把一些...
    飞扬code阅读 2,750评论 0 11
  • 1.源码文件如何变成可执行文件(*) 需要以下4个步骤:(1)预处理阶段:预处理器根据以#开头的指令,修改主要包括...
    __bba3阅读 379评论 0 1
  • 1.new 、 delete 、 malloc 、 free 关系 delete 会调用对象的析构函数 , 和 n...
    可不期诺Cappuccino阅读 939评论 0 0
  • 写在前面: 犹豫了一下,不知道该不该发这么多。毕竟题目虽全,但是其实很多人看了不到一半,估计就会默默的收藏保存,等...
    Yt_cc阅读 14,732评论 1 6
  • 第一章 1.C语言学习中的重难点 运算符:自增、自减运算符(重点) 进制:各种进制转换、原码、反码、补码 数组:一...
    恒筠阅读 853评论 0 0