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】公众号,未经授权,不得转载。
    (加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
THE END