偶然的機會看到下面的代碼,看似簡單,細細想來并非如此。
#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;
}
題目雖小,但是考察的知識點可真多。運行結果足夠我們出乎意料的。
注意的是這樣的代碼在我們的日常應用是不多見的,不提倡的。但作為考題,足夠我們思索半天了。