地址相减的问题?

2019-10-15 03:03发布

int a[3] = {0,1,2}

int *p,*q;

p = a

q  = &a[2];

请问一下,q-p的值为什么等于2呢?

printf(" %#X",p)    //p= 0x402000
printf(" %#X",q)    //q= 0x402008

两个地址相减的结果是不是为空间的个数你呢?
(0x402008 - 0x402000) / int  = 8/4 = 2

求大神解释一下,谢谢了!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
andycj
1楼-- · 2019-10-15 06:08
为什么p+1不等于0x402000,脑子转不动了
憨厚诚实大叔
2楼-- · 2019-10-15 11:59
andycj 发表于 2017-2-13 21:17
0x402001

因为一个字节放不下一个int变量
憨厚诚实大叔
3楼-- · 2019-10-15 17:50
 精彩回答 2  元偷偷看……
hjhand
4楼-- · 2019-10-15 23:05
呵呵,我看结果是等于2,猜到是那样的
只是不明白 (0x402008 - 0x402000) = 0x000008
我知道是两个int的空间,只是想了解编译器会把它处理为整数2吗?
憨厚诚实大叔
5楼-- · 2019-10-16 02:32
hjhand 发表于 2017-2-10 17:20
呵呵,我看结果是等于2,猜到是那样的
只是不明白 (0x402008 - 0x402000) = 0x000008
我知道是两个int的 ...

小伙子,你可以自定义数据结构数组看看
xianshasaman
6楼-- · 2019-10-16 04:37
很好理解吧。对int* 型指针来说,p+1的结果是什么?

一周热门 更多>