指针相减

MainRed 2012-12-13 11:01:40

int a[3]={0,1,2};
int *p,*q;
p=a;q=&a[1];
cout<<p<<endl;
cout<<q<<endl;
cout<<q-p<<endl;


地址相减的结果不是对他们的地址直接相减啊,为什么会是这样的结果呢?
...全文
163 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ylgm44 2012-12-14
  • 打赏
  • 举报
回复
引用 5 楼 quarryman 的回复:
C或C++就是这样规定的。指针类型还支持自增自减运算和与整型变量之间的运算,楼主不妨再测试一下。 C/C++ code?12345678910111213141516#include <iostream>using namespace std; int main(void){ int a[3]={0,1,2}; int *p,*q; p=a;q=&am……
楼上正解。 你这样做就是4了: cout<<(int)q-(int)p<<endl;
采石工 2012-12-14
  • 打赏
  • 举报
回复
C或C++就是这样规定的。指针类型还支持自增自减运算和与整型变量之间的运算,楼主不妨再测试一下。

#include <iostream>
using namespace std;

int main(void)
{
	int a[3]={0,1,2};
	int *p,*q;
	p=a;q=&a[1];
	cout<<p<<endl;
	cout<<q<<endl;
	cout<<q-p<<endl;
	cout<<p+1<<endl;
	cout<<p++<<endl;

	return 0;
}
输出结果可能为:

0024F924
0024F928
1
0024F928
0024F924
ljhhh0123 2012-12-14
  • 打赏
  • 举报
回复
意思是这两个指针之间有1个整数.
haodaivshen 2012-12-13
  • 打赏
  • 举报
回复
32位编译器 指针大小4字节
yisikaipu 2012-12-13
  • 打赏
  • 举报
回复
引用 1 楼 wuyu637 的回复:
一般32位编译器默认指针的大小是4字节,所以q-p相差1,
是因为int是4字节,如果是p和q是double*,则地址差8字节,但q-p仍然是1
wuyu637 2012-12-13
  • 打赏
  • 举报
回复
一般32位编译器默认指针的大小是4字节,所以q-p相差1,

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧