zoukankan      html  css  js  c++  java
  • 指针相减的单位

    最近看了面试宝典的一个题,写一个宏函数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),所以如果要求的是地址只差,应该把他们转换成整形再进行数值计算。

  • 相关阅读:
    水晶报表的部署
    成熟是一种明亮而不刺眼的光辉...
    获取页面地址的各种返回值
    索引的基本原理(转)
    cron
    VS2010 测试 普通单元测试
    SQL 学习笔记
    负载均衡
    Expression 常用方法
    轻松实现QQ用户接入
  • 原文地址:https://www.cnblogs.com/cxjchen/p/2733683.html
Copyright © 2011-2022 走看看