(1) 指向数组元素的指针变量
例6.7 输出二维数组各元素的值。
这里采用的方法是用基类型为整型的指针变量先后指向各元素,逐个输出它们的值。
#include <iostream>
using namespace std;
int main( )
{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p; //p是基类型为整型的指针变量
for(p=a[0];p<a[0]+12;p++)
cout<<*p<<″ ″;
cout<<endl;
return 0;
}
运行结果如下:
1 3 5 7 9 11 13 15 17 19 21 23
说明:
① p是指向整型数据的指针变量,在for语句中对p赋初值a[0],也可以写成“p=&a[0][0]”。
② 循环结束的条件是“p<a[0]+12”,只要满足p<a[0]+12,就继续执行循环体。
③ 执行“cout<<*p;”输出p当前所指的列元素的值,然后执行p++,使p指向下一个列元素。
(2) 指向由m个元素组成的一维数组的指针变量
可以定义一个指针变量,它不是指向一个整型元素,而是指向一个包含m个元素的一维数组。这时,如果指针变量p先指向a[0](即p=&a[0]),则p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位,见图6.17。

例6.8 输出二维数组任一行任一列元素的值。
#include <iostream>
using namespace std;
int main( )
{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (*p)[4],i,j;
cin>>i>>j;
p=a;
cout<<*(*(p+i)+j)<<endl;
return 0;
}
运行情况如下:
2 3↙
23
由于执行了“p=a”,使p指向a[0]。因此p+2是二维数组a中序号为2的行的起始地址(由于p是指向一维数组的指针变量,因此p加1,就指向下一个一维数组),见图6.18。*(p+2)+3是a数组2行3列元素地址。*(*(p+2)+3)是a[2][3]的值。

评论