设有如下数组说明:
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
在C/C++中,可将二维数组的每一行看成一个元素,即数组a包含了三个元素a[0]、a[1]、a[2],数组名a是该一维数组a的指针,即a[0]元素的指针,a+1是a[1]元素的指针,a+2是a[2]元素的指针。
指针与二维数组的关系可用下图概括。其中:
行指针:行方向的指针a、a+1和a+2,是指向一维数组的指针,其指针类型为含有三个整型元素的一维数组;
列指针:列方向的指针a[0]、a[0]+1、a[0]+2、… 、a[2]+2,其指针类型为整型。
注意:尽管a与a[0]、a+1与a[1]、a+2与a[2]的值相同,但类型不同,若有必要,可相互转换。
图片地址:http://hi.csdn.net/attachment/201201/27/0_1327640416M0bM.gif
推广:设有说明“int a[M][N];”(M、N均为符号常量),则元素a[i][j](0≤i<M,0≤j<N)的指针为:
①a[i]+j,原因如图②*(a+i)+j,因a[i]等价于*(a+i)
③*(&a[i])+j,因a+i等价于&a[i]④&a[i][j]
元素a[i][j]也有如下等价表示:
①*(a[i]+j)②*(*(a+i)+j)③(*(a+i))[j]
例 用指针输出二维数组的元素值。
#include<iostream.h>
#include<iomanip.h>
void main(void)
{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j,*p;
cout<<"用指针输出数组的全部元素:\n";
for(p=(int*)a,i=0;i<9;i++)
{ if(i&&i%3==0) cout<<'\n';
cout<<*p++<<'\t';
}
cout<<"\n用四种不同方法输出数组的元素:\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cout<<*(a[i]+j)<<'\t'
<<*(*(a+i)+j)<<'\t'
<<(*(a+i))[j]<<'\t'
<<a[i][j]<<'\n';
cout<<"用指针输出数组的各个元素:\n";
for(i=0,p=a[0];p<=a[2]+2;p++,i++)
{ if(i&&i%3==0) cout<<'\n';
cout<<setw(4)<<*p;
}
}
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
在C/C++中,可将二维数组的每一行看成一个元素,即数组a包含了三个元素a[0]、a[1]、a[2],数组名a是该一维数组a的指针,即a[0]元素的指针,a+1是a[1]元素的指针,a+2是a[2]元素的指针。
指针与二维数组的关系可用下图概括。其中:
行指针:行方向的指针a、a+1和a+2,是指向一维数组的指针,其指针类型为含有三个整型元素的一维数组;
列指针:列方向的指针a[0]、a[0]+1、a[0]+2、… 、a[2]+2,其指针类型为整型。
注意:尽管a与a[0]、a+1与a[1]、a+2与a[2]的值相同,但类型不同,若有必要,可相互转换。
图片地址:http://hi.csdn.net/attachment/201201/27/0_1327640416M0bM.gif
推广:设有说明“int a[M][N];”(M、N均为符号常量),则元素a[i][j](0≤i<M,0≤j<N)的指针为:
①a[i]+j,原因如图②*(a+i)+j,因a[i]等价于*(a+i)
③*(&a[i])+j,因a+i等价于&a[i]④&a[i][j]
元素a[i][j]也有如下等价表示:
①*(a[i]+j)②*(*(a+i)+j)③(*(a+i))[j]
例 用指针输出二维数组的元素值。
#include<iostream.h>
#include<iomanip.h>
void main(void)
{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j,*p;
cout<<"用指针输出数组的全部元素:\n";
for(p=(int*)a,i=0;i<9;i++)
{ if(i&&i%3==0) cout<<'\n';
cout<<*p++<<'\t';
}
cout<<"\n用四种不同方法输出数组的元素:\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cout<<*(a[i]+j)<<'\t'
<<*(*(a+i)+j)<<'\t'
<<(*(a+i))[j]<<'\t'
<<a[i][j]<<'\n';
cout<<"用指针输出数组的各个元素:\n";
for(i=0,p=a[0];p<=a[2]+2;p++,i++)
{ if(i&&i%3==0) cout<<'\n';
cout<<setw(4)<<*p;
}
}