指针数组是数组,每个元素为指针,声明为int p[5];数组指针是指向数组的指针,声明为int (p)[5],前者存多个地址,后者存整个数组地址,用途不同。

指针数组和数组指针是C++中两个容易混淆的概念,它们的定义和用途完全不同,关键在于理解它们的声明方式和实际含义。
指针数组:数组的每个元素是指针
指针数组本质上是一个数组,只不过数组中的每个元素都是指针类型。它的声明形式是:
类型 *数组名[大小];例如:
int *ptrArray[5];这表示 ptrArray 是一个包含5个元素的数组,每个元素都是指向 int 类型的指针。可以用来存储多个int变量的地址,常用于字符串数组或动态二维数组的管理。
立即学习“C++免费学习笔记(深入)”;
使用示例:
int *ptrArray[2];
ptrArray[0] = &a;
ptrArray[1] = &b;
数组指针:指向整个数组的指针
数组指针是指向一个数组的指针变量,它指向的是整个数组的起始地址。声明形式是:
类型 (*指针名)[大小];例如:
int (*arrayPtr)[5];这表示 arrayPtr 是一个指针,它指向一个包含5个int元素的数组。这种指针常用于函数参数中传递二维数组。
使用示例:
int arr[5] = {1, 2, 3, 4, 5};int (*arrayPtr)[5] = &arr;
此时 arrayPtr 指向整个数组 arr,*arrayPtr 就是数组名,可以用 (*arrayPtr)[i] 访问元素。
关键区别总结
- 指针数组:先有数组,元素是指针,声明时 [] 优先级高于 *,如 int *p[5]
- 数组指针:先有指针,指向整个数组,括号改变优先级,如 int (*p)[5]
- 内存布局不同:指针数组存储多个地址,数组指针只存一个地址但代表整个数组
- 用途不同:指针数组适合管理多个独立内存块,数组指针适合处理连续数组数据










