首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数组下标有关问题

2012-04-28 
数组下标问题#includeiostreamusing namespace stdint main(){int a[3]a[0]0a[1]1a[2]2int *p,*

数组下标问题
#include<iostream>
using namespace std;

int main()
{
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';
cout<<q<<" "<<p<<endl;
system("pause");
return 0;
}
输出结果为:
2
0015FD90 0015FD88

想问的是:q和p的地址之差是8(十六进制),为什么还能使数组a指向第三个元素2呢?将p和q指针换成double型的指针也是一样的结果

[解决办法]
这是有p和q指针的类型决定的。因为它们的类型都是int类型的指针,那么它们之间的差值是int类型的个数的差距。
[解决办法]
我认为3楼说的对,3楼的意思就是
Type *p, *q;
p - q = ((int)p - (int)q)/sizeof(Type)
[解决办法]
因为一个int占4字节两个就是8字节啊

热点排行