程序内容如下:
1 #include<stdio.h>
2 void main()
3 {
4 int a[3][4]={{11,21,33,42},{15,22,32,13},{41,32,24,16}};
5 int*p;
6 for(p=*a;p<*a+3*4;p++)
7 printf("%d",*p);
8 }
程序结果如图7.18所示:
图7.18 例7.14程序结果图
【例题中关键问题说明】
(1)本程序中,数组元素a[3][4]被看作由3个一维数组组成,其中a[0]、a[1]和a[2]分别代表3个一维数组的地址。因此,定义指针变量指向a[3][4]数组的首地址时需注意,应使用语句p=*a,而不能使用p=a。因为,根据指针的 定 类义 型“。i n如t*果p使;用”,语该句定义p=表a示,则p*为p指 =针a[,0p]指,a向[0的]是数一据个类地型址为而i n不t是型一,即个*整p数为类整型数,这将导致p指向类型不匹配的错误。
(2)语句p=*a等价于p=a[0],即p代表二维数组第一个元素a[0][0]的地址。根据p的定义知,指针p的加减运算单位正好是二维数组中的一个元素的长度,因此语句p++可使得p依次指向二维数组中的每一个元素,*p则对应该元素的值。
【例7.15】用行指针输出二维数组的值。
程序内容如下:
1 #include<stdio.h>
2 int main()
3 {(www.xing528.com)
4 int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
5 int(*p)[4];
6 int i,j;
7 p=a;
8 for(i=0;i<3;i++)
9 {
10 for(j=0;j<4;j++)
11 printf("%2d",*(*(p+i)+j));
12 printf("\n");
13 }
14 return 0;
15 }
程序结果如图7.19所示:
图7.19 例7.15程序结果图
【例题中关键问题说明】
(1)第7行使指针变量p指向二维数组a的首地址。
(2)第8~13行通过双层循环,使得指针变量p不断地指向二维数组a的下一个元素,从而遍历出二维数组a的所有元素。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。