指针数组VS数组指针:本质区别解析

张开发
2026/4/17 9:16:03 15 分钟阅读

分享文章

指针数组VS数组指针:本质区别解析
指针数组与数组指针的区别指针数组和数组指针是C/C中容易混淆的概念二者在声明方式、用途和内存结构上有本质区别。指针数组Array of Pointers由指针元素构成的数组每个元素都是指向某种数据类型的指针。声明形式为int *arr[10]; // 包含10个int型指针的数组内存中连续存储多个指针变量每个指针可以指向不同内存区域典型应用字符串数组char *str_array[]数组指针Pointer to Array指向整个数组的指针能够指向特定大小的数组。声明形式为int (*ptr)[10]; // 指向包含10个int元素的数组的指针存储的是整个数组的首地址指针算术运算以整个数组为单位典型应用多维数组处理内存结构对比指针数组示例 ------------------ | ptr0 | ptr1 | ptr2 | 每个格子存储独立的内存地址 ------------------ 数组指针示例 --------------------- | 指向连续数组的基地址 | ---------------------典型使用场景指针数组的用法char *days[] {Mon,Tue,Wed}; for(int i0; i3; i) printf(%s\n, days[i]);数组指针的用法int matrix[3][4]; int (*ptr)[4] matrix; printf(%d, ptr[1][2]); // 访问第二行第三列类型系统差异指针数组的类型是元素指针类型的一维数组数组指针的类型是指向特定维度数组的指针运算差异对指针数组进行1操作移动一个指针大小的距离而对数组指针进行1操作会跳过整个数组的长度。例如int arr[2][3]; int (*p)[3] arr; p; // 跳过头3个int指向arr[1][0]理解这两个概念的关键在于运算符优先级[]的优先级高于*因此int *a[]是指针数组而int (*a)[]是数组指针。

更多文章