/*指针的移动有个步长,步长等于sizeof(指针指向的元素类型)
*/
#include<stdio.h>
int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr1 = (int*)(&a + 1); //&a指针指向的元素为整个数组,故加为sizeof(数组)
int *ptr2 = (int*)((int)a + 1); //a地址再加一个字节,直接地址值相加而不是指针
int *ptr3 = (int*)(a + 1); //a为数组首元素的地址,a+1为数组第二个元素的地址
/* 数组a在内存的存放形式为
*01000000 020000000 03000000 04000000 05000000
*ptr2指向01000000的第二个字节,故*ptr2=00000002
*
*/
printf("%x %x %x\n", ptr1[-1], *ptr2, *ptr3);
return 0;
}