指向你所说的a[5] 但是a[5]不存在 只能说指向a[4]的下一号单元
&a a是数组名 &a表示的是数组的地址 也就是指向数组类型的指针
但是需要注意的是 &a 和 a 的值是一样的 也就是他们指向的地址都是同一个地址 他们的区别只是类型不同
&a 和 (int (*)[5])a 是完全等价的
你上面提到:“这里的a变成了数组指针?”
说明你意识到 数组名 a 的是含义是可以变的 但是这个变是有限制的(像上面这句话就是不对的 不是a变成数组指针)
a的含义根据具体环境可以有两种解释 一是他表示数组本身 一是他被转化为指向第一个元素的指针(这里的元素可以是数组类型 也就是所说的多维数组)
但是什么时候是数组 什么时候是元素指针 我也不能几句话说清楚 只能举几个典型的例子
1. &a 这里 a 就应该表示数组本身 所以&a 表示数组类型的地址(指针) 不是说 a被转换为数组指针
2. *(a+1) a单独出现 转换为元素指针 相当于a[1]
3. sizeof(a) a是数组本身 求的值是数组的字节数
一个比较容易出错的地方 int *p = a; sizeof(p)
!= sizeof(a) p永远是指针 结果为4 而a这里不是指针 而是数组 结果是数组的大小
4. 函数形参表中 int f(int a[5]); f(a); 这里a是元素指针 函数等价于 int f(int *a);
这里是因为函数参数不能传递数组类型 你应该听说过 上述函数申明中 5这个维数是不起作用 说的就是这个道理
大概想到的就这么几个 反正记住 数组名要么表示数组 要么表示首元素指针 不会变成别的东西 就形了