如果一个数组的每个元素都是指针变量,这个数组就是指针数组。指针数组的每个元素都必须是同一类型的指针。
声明一维指针数组的语法形式:
数据类型*数组名[下标表达式];
int *p[3];
声明了一个int类型的指针数组p,其中有3个元素,每个元素都是指向int类型数据的指针。
由于指针数组的每一个元素都是一个指针,必须先赋值在引用,因此声明数组后,对指针元素赋初值是必不可少的。
【例】利用指针数组输出一个3行3列单位矩阵
单位矩阵是主对角线元素为1,其余元素为0的矩阵。
int main()
{
int a[3] = { 1,0,0 };//定义数组,矩阵第一行
int b[3] = { 0,1,0 };//定义数组,矩阵第二行
int c[3] = { 0,0,1 };//定义数组,矩阵第三行
int* p[3] = { a,b,c };//定义整型指针数组并初始化
for (int i = 0; i < 3; i++)//对指针数组元素循环
{
for (int j = 0; j < 3; j++)//对矩阵每一行进行循环
{
cout << p[i][j]<<" ";
//cout << *(p[i]+j)<<" ";
}
cout << endl;
}
return 0;
}
运行结果:
int arr[3][3]={{1,2,3},{2,3,4},{3,4,5}};
尽管指针数组与二维数组存在本质上的差异,但二者具有相同的访问形式,可以把二维数组当作指针数组来访问。
【例】二维数组举例
int main()
{
int arr[3][3] = { {1,2,3},{2,3,4},{3,4,5} };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cout << *(*(arr+i)+j) << " ";//逐个输出二维数组第i行的元素
}
cout << endl;
}
return 0;
}
运行结果:
*(*(arr+i)+j)
这就是arr数组的第i行j列元素,对应使用下标表示的arr[i][j]
。
因篇幅问题不能全部显示,请点此查看更多更全内容