代码
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
return 0 ;
}
结果:
分析
(a+1)我们都知道,(a+1)=&a[1] , *(a+1) = a[1] ,这个1代表的是sizeof(int)
但是(&a+1)中的1代表的是sizeof(a)
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("sizeof(a) = %d\n",sizeof(a));
printf("sizeof(&a) = %d\n",sizeof(&a));
printf("\n\n");
//输出地址值,a与&a的值是一样的,但含义不同
printf("&a = %d\n",&a);
printf("&a+1 = %d\n",(&a+1)) ;
printf("\n\n");
printf("a = %d\n",a);
printf("a+1 = %d \n",a+1);
printf("\n\n");
printf("%d,%d",*(a+1),*(ptr-1));
return 0 ;
}