#include <iostream>
using namespace std;
//数组标识符a和&a表示意义的区别
int main()
{
int a[]={1,2,3,4,5};
//a表示是一个一维数组的指针,这个数组中的每个元素都是一个int
cout << a << endl;
//&a表示是一个指向一维数组的指针,记录了一个5个单元的一维数组的首地址
cout << &a << endl;
//所以a+1相当于a+sizeof(int)
cout << (a+1) << endl;
//所以&a+1相当于&a+5*sizeof(int)
cout << (&a+1) << endl;
cout << *(&a+1) << endl;//直接输出是一个地址是因为&a中存储的内容本身就是一个地址
cout << *((int *)(&a+1)-1) << endl;//直接进行类型强转,使用的是&a+1的地址,但是将这个单元的内容用int来呈现
//就像昨天遇到的把A类的指针强制转换成B类,之后使用B类的函数输出A的数据成员一样。(面试宝典P69)
//指针类型的强制转换不会影响记录的内容,只是改变寻址的方式,即+1或者-1的时候跳跃的单元数不同(面试宝典P35)
cout << endl;
int b[2][3];
//b表示是一个一维数组的指针,这个数组中每个元素又另一个一维数组的指针
//b[0]是第一个一维数组的首地址(包括三个元素);b[1]是第二个一维数组的首地址。
cout << b << endl;
//&b表示是一个二维数组的指针,记录了一个2*3的二维数组的首地址
cout << &b << endl;
//所以b+1相当于b+3*sizeof(int)
cout << b+1 << endl;
//所以&b+1相当于&b+2*3*sizeof(int)
cout << &b+1 << endl;
return 0;
}