#include <iostream>
using namespace std;
int main(void){
int a[5] = {1,2,3,4,5};
int* ptr = (int*)(&a+1);
cout<<"ptr = "<<*(ptr-1)<<"*(a + 1) = "<<*(a+1)<<endl;//这里是5,2
int* ptr1=(int*)(&a);  
cout<<"ptr = "<<*(ptr1)<<"*(a + 1) = "<<*(a+1)<<endl;//这里是1,2  
return 0;
}  

上面的两个引用该怎么理解呢,数组的引用的指针不是首地址吗?

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础


1个回答

数组名 取地址 拿到的是数组的地址 = 数组首个元素的地址

但是因为他的类型是a[5]的地址,所以&a + 1后, 指向的是下一个 a[5]的开始地址

可以想象二维数组的原理。