指针!菜鸟!
1:下列程序运行结果:5,2000000
#include<stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *ptr1 = (int *)(&a + 1);
int *ptr2 = (int *)((int)a + 1);
printf("%x,%x",ptr[-1],*ptr2);
return 0;
}
2: 还有:我怎样查看内存呐?
谢谢!
[解决办法]
调试 -> 窗口 -> 内存
[解决办法]
1、&a地址是数组的起始地址,加1说的是加上一个数组大小单元,即此时已经到了a[5],当然这个我们是不能访问的(数组越界),所以ptr[-1]就是a[4],即5。-1表示ptr前一个地址(单位是int *)
2、(int)a表示强制类型转换,数组的起始地址转换成整型,假设是0x1000 0000,(int)a + 1等于0x1000 0001,这个地址属于数组第一个元素的地址范围,即数组元素在内存中的存放如下:
a[0] 0x0000 0001
a[1] 0x0000 0002
a[2] 0x0000 0003
a[3] 0x0000 0004
a[4] 0x0000 0005
根据你的输出,可知系统使用小端字节序,即数组元素在内存中真实排序如下:
01 【00 00 00 02】 00 00 00 03 00 00 00……
即(int *)((int)a + 1),最后输出就是取【】这个地址存储的值,即0x2000000
[解决办法]
vc下使用watch窗口查看内存,linux下使用命令查看
[解决办法]
初始化一个int *类型的指针变量ptr2,然后赋值