《C语言程序设计》课件——42指针在二维数组中的应用举例.ppt
指针在二维数组中的应用举例9.6指针在二维数组中的应用举例
【例9.6】利用指针变量完成数组元素的输出。
main()
{inta[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},*p;
for(p=a[0];pa[0]+15;p++)
printf(“%d”,*p);
printf(“\n”);
}
运行结果是:
123456789101112131415程序中定义行指针变量的形式为:int(*p)[5]【例9.7】利用指向一维数组的行指针变量输出数组元素的值。
main()
{inta[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
inti,j,(*p)[5];
p=a;
for(i=0;i3;i++)
for(j=0;j5;j++)printf(%d,*(*(p+i)+j));
printf(\n);
}
运行情况如下:
123456789101112131415行指针变量的形式为:int(*p)[5]行指针变量的形式为:int(*p)[5]行指针变量的形式为:int(*p)[5]行指针变量的形式为:int(*p)[5]行指针变量的形式为:int(*p)[5]程序中定义行指针变量的形式为:int(*p)[5]程序中定义行指针变量的形式为:int(*p)[5]程序中定义行指针变量的形式为:int(*p)[5]程序中定义行指针变量的形式为:int(*p)[5]程序中定义行指针变量的形式为:int(*p)[5]程序中定义行指针变量的形式为:
int(*p)[5]
【例9.8】数组行地址和列地址的输出。
main()
{shorta[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
printf(1:%ld,%ld,%ld\n,a,a+1,a+2);
printf(2:%ld,%ld,%ld,%ld\n,*a,*a+1,*a+2,*a+3);
printf(3:%ld,%ld,%ld,%ld\n,*(a+1),*(a+1)+1,*(a+1)+2,*(a+1)+3);
printf(4:%ld,%ld,%ld,%ld\n,*(a+2),*(a+2)+1,*(a+2)+2,*(a+2)+3);
printf(5:%ld,%ld,%ld\n,a[0],a[1],a[2]);
printf(6:%ld,%ld,%ld,%ld\n,a[0][0],a[0][1],a[0][2],a[0][3]);
printf(7:%ld,%ld,%ld,%ld\n,a[0],a[0]+1,a[0]+2,a[0]+3);
printf(8:%ld,%ld,%ld,\n,*a,*(a+1),*(a+2));
printf(9:%d,%d,%d,\n,*(a[1]+2),*(*(a+1)+2),a[1][2]);
}
运行结果如下:
1:404,414,424 (第1,2,3行的行地址)
2:404,406,408,410 (第0行4个元素的地址)
3:414,416,418,420 (第1行4个元素的地址)
4:424,426,428,430 (第2行4个元素的地址)
5:404,414,424 (第0,1,2行的行地址)
6:404,406,408,410 (第0行4个元素的地址)
7:404,406,408,410 (第0行4个元素的地址)
8:404,414,424(第0,1,2行中第0列元素地址,即a[0],a[1],a[2])
9:8,8,8 (第1行第2列元素的值)程序中定义行指针变量的形式为:int(*p)[5]程序中定义行指针变量的形式为:int(*p)[5](1)开始把列地址a[0]赋给p。p是指向整型数据的指针变量,p+1是使p的地址值增加两个字节,使p移动到下一个元素处。因此循环15次后,输出全部元素的值。
(2)如果将p=a[0]改写成p=a,程序就可能出错。因为尽管a[0]和a的值是相同的,但属性不同,a指向行,a[0]指向列,二者指向的对象不同。由于p是指向整型数据的指针变量,所以它只能接受a[0],而不能接受a。但写成下面的形式是允许的:
p=*a;
p=*(a+0);
p=a[0][0];
(3)如果一定想将a赋给p,必须先进行强制类型转换