数组指针通常指指向数组首元素的指针,如int* p = arr,可访问元素且数组传参时退化为该指针。

在C++中,数组与指针的关系密切但容易混淆,尤其是“数组指针”和“指向数组的指针”这类概念。虽然它们听起来相似,但实际含义和用法有明显区别。理解它们的关键在于搞清类型和语法。
数组指针:指向数组元素的指针
通常所说的“数组指针”其实是指 指向数组中某个元素的指针,最常见的是指向数组首元素的指针。例如:
int arr[5] = {1, 2, 3, 4, 5};int* p = arr; // p 指向 arr[0]
这里,p 是一个指向 int 的指针,它保存的是数组首元素的地址。可以通过指针访问数组元素:
- p[0] 等价于 arr[0]
- *(p + 1) 等价于 arr[1]
这种指针常用于函数传参,因为数组在传参时会退化为指向首元素的指针:
立即学习“C++免费学习笔记(深入)”;
void print(int* arr, int size) {for (int i = 0; i cout }
指向数组的指针:指向整个数组的指针
“指向数组的指针”是指 一个指针,它指向的是整个数组对象,而不是单个元素。它的类型包含数组的大小和元素类型。
声明方式如下:
int arr[5] = {1, 2, 3, 4, 5};int (*ptr)[5] = &arr; // ptr 是指向长度为5的int数组的指针
注意:
PHP经典实例(第2版)能够为您节省宝贵的Web开发时间。有了这些针对真实问题的解决方案放在手边,大多数编程难题都会迎刃而解。《PHP经典实例(第2版)》将PHP的特性与经典实例丛书的独特形式组合到一起,足以帮您成功地构建跨浏览器的Web应用程序。在这个修订版中,您可以更加方便地找到各种编程问题的解决方案,《PHP经典实例(第2版)》中内容涵盖了:表单处理;Session管理;数据库交互;使用We
- &arr 是整个数组的地址,类型是 int (*)[5]
- ptr + 1 会跳过整个5个int的数组
- 解引用 *ptr 得到的是数组 arr 本身,*(ptr) 可以当作 arr 使用
使用示例:
cout区分 arr、&arr[0] 和 &arr
虽然三者值相同(地址一样),但类型不同:
- arr:类型是 int[5],用在表达式中退化为 int*
- &arr[0]:类型是 int*,指向首元素
- &arr:类型是 int (*)[5],指向整个数组
这在函数参数或模板推导中会产生不同行为。
实际应用场景
指向数组的指针常用于多维数组处理。例如二维数组:
int matrix[3][4];int (*p)[4] = matrix; // p 指向 matrix 的第一行(每行是4个int的数组)
这样 p 可以遍历每一行:
for (int i = 0; i for (int j = 0; j cout }基本上就这些。关键是理解指针的类型决定了它如何解释所指向的内存。数组指针关注元素,指向数组的指针关注整个数组结构。搞清类型,就能正确使用。









