例一:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdlib.h>
#include<stdio.h>
int main()
{
int array[5] = { 1, 2, 3, 4, 5 };
int *ptr1 = (int *)(&array + 1);
int *ptr2 = (int *)((int)array + 1);
printf("%x", *(ptr1-1));
printf("\n");
printf("%x", *ptr2);
system("pause");
return 0;
}
程序运行的结果是:
输出的*(ptr-1)和*ptr2均为16进制的数字。
程序解析:&array表示整个数组的地址,&array+1则表示下一个数组的首地址(int *)(&array+1)则表示将下一个数组的首地址强制转换成(int *)类型。
(int)array表示将数组array的首元素的首地址强制转换成int 类型的,此时相当于给一个整型加1就直接加一,然后在强制转换成(int *)类型,而指针类型4个字节而数组中的元素则是以4个字节方式存放的。我们可以通过内存管理来看:
所以*p2输出则为2000000
而*(p1-1)则指向数组的最后一个元素则为5