我们来一行一行的解读
int a[5] = { 1, 2, 3, 4, 5 }; //定义一个含5个int类型的元素的数组。
int *ptr = (int*)(&a + 1);
上面这句拆开来
&a + 1 :&是取地址的标识符,即取a数组的首地址并向后偏移1位,即a数组的第2个元素。
(int*)(&a + 1):int*用于定义指针,即一个指针指向a数组的第2个元素。
*ptr = (int*)(&a + 1):定义一个指针ptr,指向a数组的第2个元素。
printf("%d %d\n", *(a + 1), *(ptr – 1));
*(a + 1):a即首地址,相当于一个指针,(a + 1)相当于一个指针向后偏移1位,即a数组的第2个元素,*(a + 1)就是获取a数组的第2个元素的值。
*(ptr – 1):ptr是一个指针,指向指向a数组的第2个元素,(ptr – 1)即指针向前偏移一位,即指向a数组的第1个元素,*(ptr – 1)就是获取a数组的第1个元素的值
printf("%d %d\n", *(a + 1), *(ptr – 1)):结果会依次打印出整型的 a数组的第2个元素的值和a数组的第1个元素的值,即 2 1
请参考 |