指针数组
什么是指针数组,怎么声明?
- 指针数组实质上是个数组,不过该数组的每个元素都是指针变量,还必须是同一类型的指针。
- 声明: 数据类型 * 数组名 [ 下标表达式 ];
——下标表达式: 数组元素的个数
——数据类型: 每个元素指针的类型
——数组名: 指针数组的名字,也是这个数组的首地址
—例如:一个int类型的指针数组 pa,共3个元素,每个元素都是一个指向int类型的指针
int *pa[3];
- 声明后,必须为每个指针元素赋初值
##三、实例
例题:利用指针数组输出单位矩阵
#include<iostream>
using namespace std;
int main(){
int line1[]={1,0,0};//定义数组,矩阵第一行
int line2[]={0,1,0};//定义数组,矩阵第二行
int line3[]={0,0,1};//定义数组,矩阵第三行
// 定义整型指针数组并初始化
int *pLine[3]={line1,line2,line3};
cout<<"Matrix test: "<<endl;
for(int i=0;i<3;i++){
for(int j=0;i<3;j++)
cout<<pLine[i][j]<<" ";
cout<<endl;
}
return 0;
}
- 注意:pLine[i][j]与*(pLine[i]+j)等价,在此题内形式上与访问二维数组相似,过程不太一样
数组指针
数组指针是一个指针,这个指针指向一个数组,我们不禁去想,数组本身就是就是一个地址,那么数组指针,我们就可以理解其为一个二维数组的行指针。
比如char (*pointToArrray)[4]
声明了一个数组指针pointToArrray
,这个指针指向了一个char[4]
的数组,每个数组元素都是一个char
类型的变量。
如何给数组指针pointToArray
进行赋值呢?设现在有char array[4];
,则可以通过pointToArray=&array;
对数组指针进行赋值。
面试题
int (*p)[n]
与int *p[n]
的区别- 输出代码结果:
void main()
{
int arr[][3] = { 1, 2, 3, 4, 5, 6 };
int(*ptr)[3] = arr;
printf("%d %d\n",(*ptr)[0],(*ptr)[1]);
ptr++;
printf("%d %d\n", (*ptr)[0], (*ptr)[1]);
}
答案为:
1 2
4 5
其实就是行指针的考点,行指针++的时候就跳到了下一行。