一般情况下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。