指针与二维数组
学习指针与二维数组的关系后发现有一些特别的地方,是指针与一维数组不一样的,在这里总结一下。
- 首先明确二维数组名是一个指针常量,且是行指针。所以把它赋值给别的指针时要注意(下面会讲)。
- 指针在二维数组中分为行指针和元素指针(即列指针),这里设数组为a[ 2 ][ 3 ]。
- 行指针如:a,a+1;
- 元素指针如:*(a+1)(即a[1]);
- 注意:a+i是下标为i行的首地址,即a[ i ][ 0 ]的地址。但*(a+i)不是a[ i ][ 0 ],这是从行控制转为列控制的标志。
- 二维数组元素a[ i ][ j ]的地址表示及元素表示
- a[ i ][ j ]的地址可表示为:&a[ i ][ j ]、a[ i ]+j、*(a+i)+j;
- 元素表示为:a[ i ][ j ]、*(a[ i ]+j)、*(*(a+i)+j)、(*(a+i))[ j ];
- 由第一点和第二点可知,想要用指针访问二维数组只有行指针和元素指针两种途径,具体方法如下:
int (*p)[3];
p=a;
*(p[1]+2)=20;
int *p;
p=a[0];
- 应用:编写一个通用的输出二维数组的函数
void Print(int *p,int row, int col)
{
for(int i=0;i<row*col;i++,p++)
{
if(i%col==0) cout<<endl;
cout<<setw(4)<<*p;
}
cout<<endl;
}