(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]的值。

评论