#include<stdio.h> main() { int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int *)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); }
#include <stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
int a[5] = {1,2,3,4,5};
int *ptr = (int *)(&a+1);
printf("ptr=%d\n",ptr);
printf("&a[4]=%d\n",&a[4]);
printf("%d,%d\n",*(a+1),*(ptr-1));
//printf("%d,%d\n",*a+1,*(ptr-1));
return 0;
}运行结果
ptr=600007684
&a[4]=600007680
2,5
由于*(a + 1)是数组a的第二个元素,也就是2,而*(ptr - 1)是ptr指针前一个位置的值。由于ptr指向了数组a之后的位置,所以ptr - 1指向了数组a的最后一个元素的位置,也就是5。
所以,这段代码会输出:2,5。