一般情况下arr代表的是数组首元素的地址,而&arr代表的则是数组的地址。 虽然数组首元素地址与数组地址的内存地址相同,但对他们进行运算时结果却不同。
#include<iostream>
using namespace std;
int main()
{
int arr[5] = { 1,2,3,4,5 };
int arr1[5] = { 0,2,4,6,8 };
cout << &arr << ' '<< &arr1 << endl;
cout << &arr + 1 << ' ' << &arr1 + 1 << endl;
cout << *(&arr + 1) << ' ' << *(&arr1 + 1) << endl;
cout << *(&arr + 1) - 1 << ' ' << *(&arr1 + 1) - 1 << endl;
cout << *(*(&arr + 1) - 1) << ' ' << *(*(&arr1 + 1) - 1) << endl;
return 0;
} 运行结果如下,&arr + 1 是 &arr 向后移动整个数组所占字节数(5 x 4 = 20)得到的地址,&arr + 1 的值和 *(&arr + 1)的值相等,*(&arr + 1) - 1 是 *(&arr + 1)向前移动4个字节得到的,因此*(*(&arr + 1) - 1)的值为数组中最后一个元素的值,代码中给出了两个整型数组,运行后得到的结果都是数组中最后一个元素的值。步骤解析 *(*(&arr+1)-1) 如下:
所以,*(*(&arr+1)-1) 等价于 arr[4],即数组 arr 的最后一个元素,结果为 5。
因此,*(*(&arr + 1) - 1)的结果应该是数组的最后一个元素arr[4]的值,即5。(搬AI的)