指针相减问题

[复制链接]
1756|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 | 显示全部楼层
去看下指针的运算,这是基础知识
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
dfsa 发表于 2012-6-22 21:22 | 显示全部楼层
所以对于int类型的数组而言,p + 1的地址会比p大4bytes,但(p + 1) - p却会等于1,这个1表示1个int所需要占用的空间,即4bytes。
woaichengdian 发表于 2012-6-23 13:04 | 显示全部楼层
就是3楼说的那样,lz估计是c/c++刚开始学吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部