首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

两个变量取地址直接相减结果不正确解决方案

2012-11-07 
两个变量取地址直接相减结果不正确最近看了面试宝典的一个题,写一个宏函数FIND(struc,a),要算出结构体里的

两个变量取地址直接相减结果不正确
最近看了面试宝典的一个题,写一个宏函数FIND(struc,a),要算出结构体里的变量相对于结构体的偏移量
typedef struct{
int a;
char b;
int ccc;
}b;
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)); }
就能得出正确的结果。


我想问的是为什么会这样的原因?

[解决办法]
两个指针计算结果有个单位是,是指针所指类型的长度,两者地址之差在数值上 = 同类型指针相减结果 * (指针类型长度).
例子: int p[3];
&p[2] - &p[0] = 2; // 单元是 (sizeof(int));
可以看到相减结果是2,但单纯就 &p[2] 与&p[0] 的地址在数值上是相差 8 = 2 * 4;
所以当你把指针转成int型去计算就变成了简单的整数计算,得出你想要的8了.

热点排行