标题:[HELP] int型指针地址相减的问题
只看楼主
gongzaijun
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-5
 问题点数:0 回复次数:6 
[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
apeng332
Rank: 2
等 级:论坛游民
帖 子:44
专家分:40
注 册:2009-5-12
得分:0 
想学好编程语言就要有LZ的这种钻研精神....
2010-01-06 12:54
ccccapple
Rank: 1
来 自:中山
等 级:新手上路
帖 子:5
专家分:2
注 册:2009-11-15
得分:0 
还可以这样理解 q=P+2;q-p=p+2-p
2010-01-07 20:22
ccccapple
Rank: 1
来 自:中山
等 级:新手上路
帖 子:5
专家分:2
注 册:2009-11-15
得分:0 
还可以这样理解 q=p+2;q-p=p+2-p
2010-01-07 20:23
h978147355
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:63
专家分:187
注 册:2009-12-29
得分:0 
q-p确实是2
指针的想减得到的是一个整数 而不是字节数
就好像 p+1指向的是下一个数组成员一样 p+2也就是q了
q-p所表示的也就是q所指向的元素和p所指向的元素中间有几个元素
2010-01-08 11:12
转身
Rank: 2
等 级:论坛游民
帖 子:58
专家分:25
注 册:2010-1-4
得分:0 
good 同意 顶一下

没有谁对谁错,只有谁不懂得珍惜
2010-01-08 14:22



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




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

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