69,366
社区成员
发帖
与我相关
我的任务
分享
整理一下
int main(int argc,char *argv[])
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);//这里直接把指针移动到a[5]的地址的NEXT地址上
int *ptr2=(int *)((int)a+1);//这里仅仅是把a[5]的首地址+1
printf("%x,%x",ptr1[-1],*ptr2);//所以ptr1[-1]相当于把地址又移动回了最后一个数组上,及a[4]=5
getchar();
//而ptr2的内容就比较戏剧性了
//看一下内存格式 :
//ptr2这时的指针指向了这里 ↓
//|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0|1|
//↑高 ↑低
//所以读出的数据就是整形四个字节就是02000000,也就是2000000
}
int main(int argc,char *argv[])
{
int a[5]={1,2,3,4,5};
// cout<<a<<endl;
cout<<&a<<endl;
cout<<&a+1<<endl;
int *ptr1=(int *)(&a+1);//这里直接把指针移动到a[5]的地址的NEXT地址上
int *ptr2=(int *)((int)a+1);//这里仅仅是把a[5]的首地址+1
printf("%x,%x",ptr1[-1],*ptr2);//所以ptr1[-1]相当于把地址又移动回了最后一个数组上,及a[4]=5
getchar();
//而ptr2的内容就比较戏剧性了
//看一下内存格式 :
//ptr2这时的指针指向了这里 ↓
//|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0||1|
//所以读出的数据就是整形四个字节就是02000000,也就是2000000
}