1. 名词解释
- 指针数组:array of pointers, 即用于存储指针的数组,也就是数组元素都是指针
- 数组指针:a pointer to an array,即指向数组的指针
2. 用法区别
int* a[4]
指针数组- 表示数组a中元素都是int型指针
*a[i]
和*(a[i])
是一样的,因为[]优先级比*高- 元素表示:
*a[i]
int (*a)[4]
数组指针- 表示指向数组a的指针
- 元素表示:
(*a)[i]
在实际中,对于指针数组,一般:
typedef int *pInt;
pInt a[4];
这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。
3. 代码演示
/*
* @Author: sanjayzhong
* @Github: https://github.com/sanjayzzzhong
* @Date: 2019-10-09 22:02:38
*/
#include <iostream>
using namespace std;
void test01(){
//对一维数组的应用
int *a[5]; //指针数组 array of pointers
int (*b)[5]; // 数组指针 a pointer to an array
int c[5] = {1,2,3,4,5};
//把数组分配给两者
b = &c; //这里要取c的地址
for(int i = 0; i < 5; ++i){
a[i] = &c[i];
}
int *p = c;
cout << sizeof(p) << endl;
cout << sizeof(c) << endl;
//随机查看结果
cout << *a[1] << endl; //输出2就对
cout << (*b)[1] << endl;
//对二维数组的应用
int arr[3][4];
int* pArray[3]; //指针数组
//这里int *pArray[3] 表示一个一维数组内存放着三个指针变量,
//分别是pArray[0]、pArray[1]、pArray[2]
int (*aPointer)[4]; //数组指针
//赋值
for(int i = 0; i < 4; ++i){
pArray[i] = arr[i];
}
aPointer = arr;
aPointer++; //从arr[0][] 到arr[1][]
}
int main(int argc, char *argv[]){
test01();
return 0;
}