打印

指针相减问题

[复制链接]
1255|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2012-6-22 20:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iostream>
using namespace std;

int main(){
int array[10]={3,7,4,1,2,6,5,8,9,10};
int *pa,*pb;
pa=array;
pb=&array[2];
int res=pb-pa;
cout<<pa<<endl;
cout<<pb<<endl;
cout<<"pb-pa= "<<res<<endl;
return 0;
}


这个程序中,cout<<"pb-pa= "<<res<<endl; 两个地址得出的结果是是:2 . 谁能告诉我到底是怎么的出来的呀,我觉得这俩个元素不是挨着的吗,怎么中间有两个位置是空着的?

相关帖子

沙发
秋天落叶| | 2012-6-22 20:57 | 只看该作者
两个指针相减是得到这两个指针之间相隔的元素个数

使用特权

评论回复
板凳
gxgclg| | 2012-6-22 21:10 | 只看该作者
数组是从0开始的 所以2-0 就等于2了

使用特权

评论回复
地板
yybj| | 2012-6-22 21:17 | 只看该作者
去看下指针的运算,这是基础知识

使用特权

评论回复
5
dfsa| | 2012-6-22 21:22 | 只看该作者
对于某个数据类型(比如int)的数组而言,某个地址p,如果要指向其后面一个元素,那么就是p + 1,但是:
(char*)(p + 1) - (char*)p = 1 * sizeof(数组中元素的数据类型),而不会是1

但是:
(p + 1) - p  
= ((char*)(p + 1) - (char*)p) * sizeof(char) / sizeof(数组中元素的数据类型)  
= 1 * sizeof(数组中元素的数据类型) / sizeof(数组中元素的数据类型)
= 1

使用特权

评论回复
6
dfsa| | 2012-6-22 21:22 | 只看该作者
所以对于int类型的数组而言,p + 1的地址会比p大4bytes,但(p + 1) - p却会等于1,这个1表示1个int所需要占用的空间,即4bytes。

使用特权

评论回复
7
woaichengdian| | 2012-6-23 13:04 | 只看该作者
就是3楼说的那样,lz估计是c/c++刚开始学吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝