偶然的机会看到下面的代码,看似简单,细细想来并非如此。
#include <stdio.h>
int main(int argc, char* argv[])
{
int a[5]={1,2,3,4,5};
int *ptr1=(int*)(&a+1);
int *ptr2=(int*)((int)a+1);
int *ptr3=(int*)(&a[0] + 1);
printf("%x,%x,%x\n",ptr1[-1],*ptr2,*ptr3);
getchar();
return 0;
}
题目虽小,但是考察的知识点可真多。运行结果足够我们出乎意料的。
注意的是这样的代码在我们的日常应用是不多见的,不提倡的。但作为考题,足够我们思索半天了。