指针数组和指针数组区别
指针数组和指针数组区别:
这是C/C++中非常容易混淆的概念!我觉得用English来就比较好,一个是 Array of Pointers,本质是Array;一个是 Pointer to Array, 本质是Pointer。
指针数组 (Array of Pointers)
- 本质是数组,数组中的每个元素都是指针
- 声明方式:
类型* 数组名[大小] - 读法:从右向左读 - “一个大小为X的数组,每个元素是指向类型的指针”
#include <iostream>
using namespace std;int main() {int a = 10, b = 20, c = 30;// 指针数组:包含3个int指针的数组int* ptr_arr[3] = {&a, &b, &c};// 结构说明:// ptr_arr → [指针0, 指针1, 指针2]// | | |// ↓ ↓ ↓// &a &b &ccout << "指针数组示例:" << endl;for(int i = 0; i < 3; i++) {cout << "ptr_arr[" << i << "] = " << ptr_arr[i] << ", *ptr_arr[" << i << "] = " << *ptr_arr[i] << endl;}return 0;
}
输出:
指针数组示例:
ptr_arr[0] = 0x7ffeefbff5ac, *ptr_arr[0] = 10
ptr_arr[1] = 0x7ffeefbff5a8, *ptr_arr[1] = 20
ptr_arr[2] = 0x7ffeefbff5a4, *ptr_arr[2] = 30
指针数组的内存布局
ptr_arr[0] → │ int 10 │ (变量a)
ptr_arr[1] → │ int 20 │ (变量b)
ptr_arr[2] → │ int 30 │ (变量c)
数组指针 (Pointer to Array)
- 本质是指针,指向一个整个数组
- 声明方式:
类型 (*指针名)[大小] - 读法:从内向外读 - “一个指针,指向大小为X的类型数组”
#include <iostream>
using namespace std;int main() {// 一个普通数组int arr[3] = {100, 200, 300};// 数组指针:指向包含3个int的数组的指针int (*arr_ptr)[3] = &arr;// 结构说明:// arr_ptr → 指向整个arr数组// *arr_ptr → 就是arr数组本身cout << "数组指针示例:" << endl;cout << "arr_ptr = " << arr_ptr << endl;cout << "*arr_ptr = " << *arr_ptr << endl;cout << "**arr_ptr = " << **arr_ptr << endl; // 第一个元素// 访问数组元素for(int i = 0; i < 3; i++) {cout << "(*arr_ptr)[" << i << "] = " << (*arr_ptr)[i] << endl;}return 0;
}
输出:
数组指针示例:
arr_ptr = 0x7ffeefbff5ac
*arr_ptr = 0x7ffeefbff5ac
**arr_ptr = 100
(*arr_ptr)[0] = 100
(*arr_ptr)[1] = 200
(*arr_ptr)[2] = 300
数组指针的内存布局
arr_ptr → │ 100 │ 200 │ 300 │ (整个arr数组)
