标题:[HELP] int型指针地址相减的问题
取消只看楼主
gongzaijun
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-5
 问题点数:0 回复次数:1 
[HELP] int型指针地址相减的问题
程序员面试宝典二P70有个问题。

========================================
    int a[3];
    a[0]=0; a[1]=1; a[2]=2;
    int *p, *q;

    p=a;
    q=&a[2];

    cout << a[q-p] << '\n';
========================================

按照书里的解释,p的地址指向a(即a[0]),q的地址指向a[1](我觉得书上写错了,应该是a[2]

然后书里还让你试着执行: cout << p 和 cout << q
得出: 0x22ff68 和0x22ff70,相差为2。

可是按我的理解,a是int型的数组,应该占4位,相差应该为8才对。

我试着写了段程序,输出: cout << p 和 cout << q
结果是0013FF74 和 0013FF7C,和我理解的一样。

可是不解的是我接着输出: cout << q-p,结果居然是2,为什么不是8呢?

麻烦哪位大侠帮我分析分析,谢谢。
搜索更多相关主题的帖子: HELP int 地址 指针 
2010-01-05 22:32
gongzaijun
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-5
得分:0 
继续调查了一下,估计应该是下面这个道理。

====================================================
指针P加1不是简单地将P的值加上1,而是将P的值加上1倍的它
所指向的变量占用的内存字节数。
====================================================

因此q-p时,不是q的值减去p的值,还要除去指向变量所占的
字节数,这样等于2就可以理解了。

谢谢大家,顺便跟大家共享一下。
2010-01-06 11:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-295084-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.184230 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved