| 我们来一行一行的解读 
 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
 
 请参考
 |