文章目录
- 概述
- 1. 什么是指针数组 (Array of Pointers)
- 定义:
- 示例:
- 解释:
- 2. 什么是数组指针 (Pointer to Array)
- 定义:
- 示例:
- 解释:
- 关键区别
- 例子对比
- 指针数组:
- 数组指针:
- 总结
概述
指针数组是一个数组,其中的每个元素都是指针
。这些指针可以指向不同的内存地址,通常用于存储一组相同类型的指针。数组指针是一个指针,它指向数组的首地址
。它本身是一个指针,但指向的内容是一个数组对象。- 指针数组常用于需要动态管理一组指针的场景,而数组指针则用于处理数组的整体,特别是在函数参数传递和多维数组的处理中比较常见
1. 什么是指针数组 (Array of Pointers)
指针数组是一个数组,其中的每个元素都是一个指针。具体来说,它是一个存储多个指针的数组,数组的每个元素指向一个对象或者数据。
定义:
<type>* arr[size];
其中,<type>*
表示数组元素是指向某种类型的指针,size
是数组的大小。
示例:
#include <iostream>
using namespace std;int main() {int a = 10, b = 20, c = 30;// 定义一个指针数组,数组中有 3 个 int* 类型的指针int* arr[3];arr[0] = &a; // arr[0] 指向 aarr[1] = &b; // arr[1] 指向 barr[2] = &c; // arr[2] 指向 c// 输出每个指针指向的值cout << "*arr[0]: " << *arr[0] << endl; // 输出 10cout << "*arr[1]: " << *arr[1] << endl; // 输出 20cout << "*arr[2]: " << *arr[2] << endl; // 输出 30return 0;
}
解释:
arr
是一个包含 3 个int*
的数组,表示arr
数组的每个元素都是一个指向int
类型的指针。- 每个指针指向不同的
int
类型变量:a
、b
和c
。
总结:
- 指针数组是一个数组,其中每个元素都是一个指针。指针数组的每个元素的大小是相同的(指针类型相同),但每个指针可以指向不同的变量或对象。
- 在指针数组 中,每个指针元素的大小是相同的,因为它们是指向相同类型的指针,指针的大小通常是由平台决定的
[4 字节(32 位系统)或 8 字节(64 位系统),与指针所指向的类型(int char 或 float)无关]
。 - 虽然指针的大小是相同的,但可以使用
void*
来存储不同类型的指针,允许数组存储指向不同类型的指针。
2. 什么是数组指针 (Pointer to Array)
数组指针是一个指针,它指向整个数组。也就是说,它是一个指向数组的指针,而不是指向数组中的单个元素。
定义:
<type> (*ptr)[size];
其中,<type>
是数组中元素的类型,size
是数组的大小。ptr
是一个指针,它指向一个包含 size
个 <type>
元素的数组。
示例:
#include <iostream>
using namespace std;int main() {int arr[3] = {10, 20, 30};// 定义一个指向数组的指针int (*ptr)[3] = &arr;// 通过指针访问数组元素cout << "ptr[0][0]: " << (*ptr)[0] << endl; // 输出 10cout << "ptr[0][1]: " << (*ptr)[1] << endl; // 输出 20cout << "ptr[0][2]: " << (*ptr)[2] << endl; // 输出 30return 0;
}
解释:
arr
是一个包含 3 个整数的数组。ptr
是一个指向arr
数组的指针,它可以通过(*ptr)[index]
来访问数组中的元素。- 需要注意,
ptr
是指向整个数组的指针,而不是指向数组中的某个元素。
总结:
- 数组指针是一个指针,它指向整个数组。在使用时,指针指向整个数组,可以通过解引用来访问数组的元素。
关键区别
特性 | 指针数组 (Array of Pointers) | 数组指针 (Pointer to Array) |
---|---|---|
定义 | 一个数组,数组的每个元素是一个指针 | 一个指针,指向一个数组 |
元素的类型 | 每个元素是指针,指向某种类型的数据 | 该指针指向整个数组,而不是数组的单个元素 |
示例 | int* arr[3] :数组 arr 中有 3 个指向 int 的指针 | int (*ptr)[3] :指针 ptr 指向一个包含 3 个整数的数组 |
用法 | 用来存储多个指针,指向不同的对象或数据 | 用来处理指向整个数组的指针,通常用于多维数组 |
例子对比
指针数组:
int* arr[3]; // 数组的每个元素是一个指针
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
在这个例子中,arr
是一个指针数组,其中每个元素都是一个指向 int
类型的指针。
数组指针:
int (*ptr)[3]; // ptr 是一个指向包含 3 个整数的数组的指针
ptr = &arr;
在这个例子中,ptr
是一个指向整个数组 arr
的指针,而不是指向数组的单个元素。
总结
- 指针数组:是一个数组,数组的每个元素是指向某种类型的指针。
- 数组指针:是一个指针,指向整个数组,而不是数组中的单个元素。
这两者虽然名字相似,但含义和用途完全不同,理解它们的差异对于正确使用指针和数组至关重要。