博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针相减的单位
阅读量:5077 次
发布时间:2019-06-12

本文共 732 字,大约阅读时间需要 2 分钟。

最近看了面试宝典的一个题,写一个宏函数FIND(struc,a),要算出结构体里的变量相对于结构体的偏移量,如:

1 typedef struct{2     int a;3     char b;4     int ccc;5 }b;6 FIND(b,a)//结果为0

我并没有采用书上的方法,我自己试了一下,程序如下:

#define FIND(struc,a) { printf("%p\n",(&(struc.a)) - (&struc)); }typedef struct{    int a;    char b;    int ccc;}b;void main(){    int d;    b c;    FIND(c,ccc);    exit(0);}

结果打印的结果是2,但是真正的结果应该是8。后来经过我的实验发现吧FIND改成
#define FIND(struc,a) { printf("%p\n",((unsigned int)&(struc.a)) - ((unsigned int)&struc)); }
就能得出正确的结果。

 

后来通过发帖询问,找到了原因。

原来是因为指针直接相减的话,他们有一个单位,那就是这个指针的类型。

例如

1 int a[3];2 printf("%d\n",(&a[2]) - (&a[1]));

显示的结果就是1,因为他们的单位是sizeof(int),是他们的地址只差/sizeof(int),所以如果要求的是地址只差,应该把他们转换成整形再进行数值计算。

转载于:https://www.cnblogs.com/cxjchen/archive/2012/10/22/2733683.html

你可能感兴趣的文章
tp3.2 页面Windows正常 linux异常,页面找不到
查看>>
angularJS(2)
查看>>
centos安装——usb安装技术问题整理
查看>>
C#二维码与条形码的生成
查看>>
【leetcode】Container With Most Water
查看>>
如何熟悉一个项目?
查看>>
用户类热门排行榜特效
查看>>
Java基础学习,一些零散的笔记之Java的包
查看>>
Android工作学习第5天之TabHost实现菜单栏底部显示
查看>>
小巧精致的ASP.Net分页控件
查看>>
WPF/MVVM 快速开始指南(译)(转)
查看>>
Angular1.0路由的Hashbang和HTML5模式
查看>>
uboot配置过程详解1
查看>>
ajax复选框的选中添加
查看>>
万门大学-人工智能、大数据与复杂系统-01.复杂系统
查看>>
《机器学习基石》---线性回归
查看>>
js实现滑动返回顶部
查看>>
BZOJ 1208 [HNOI2004]宠物收养所:Splay(伸展树)
查看>>
vm setup灰色解决办法
查看>>
机器学习基石笔记14——机器可以怎样学得更好(2)
查看>>