1.102、指针数组和数组指针的区别
指针数组和数组指针是C++中两个容易混淆但本质不同的概念,关键区别在于它们的定义对象和用途:
1. 指针数组(Array of Pointers)
- • 定义:一个数组,数组中的每个元素都是指针。
- • 本质:数组,元素类型是指针。
- • 示例:
int a=1, b=2, c=3;
int* arr[3] = { &a, &b, &c }; // arr是含3个int*元素的数组
- • 用途:存储多个指针,指向不同的变量或对象。
- • 访问:
*arr[i]
访问第i个指针指向的值。
2. 数组指针(Pointer to an Array)
- • 定义:一个指针,指向一个数组(整个数组的首地址)。
- • 本质:指针,指向一个固定大小的数组类型。
- • 示例:
int arr[5] = {1,2,3,4,5};
int (*ptr)[5] = &arr; // ptr是指向含5个int元素数组的指针
- • 用途:指向整个数组,常用于函数参数传递多维数组。
- • 访问:
(*ptr)[i]
访问数组第i个元素。
3. 语法区别总结
名称 | 定义示例 | 含义 | 访问方式 |
指针数组 | int* arr[3]; |
数组,元素是指针 | *arr[i] |
数组指针 | int (*ptr)[3]; |
指针,指向含3个元素的数组 | (*ptr)[i] |
4. 常见混淆点
- •
*ptr[i]
与(*ptr)[i]
含义不同:- •
*ptr[i]
:先访问指针数组第i个元素(指针),再解引用。 - •
(*ptr)[i]
:先解引用指向数组的指针,访问数组第i个元素。
- •
5. 应用场景
- • 指针数组:管理多个指针,如字符串数组(
char* argv[]
)、动态对象指针集合。 - • 数组指针:传递多维数组时指定数组大小,避免数组退化为指针导致信息丢失。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1943
文章版权归作者所有,未经允许请勿转载。
THE END