文档详情

《C语言程序设计》课件——39一维数组的指针表示法.ppt

发布:2025-03-25约3.76千字共7页下载文档
文本预览下载声明

一维数组的地址表示法数组名下标法地址法9.3一维数组的指针表示方法

9.3.1一维数组的地址表示法(地址法)

定义一个含有5个元素的一维数组a如下:

inta[5]={1,3,5,7,9};

它在内存中的分配情况如下图所示。

例如:a+1的实际地址为:1010+1*2=1012

a[3]的实际地址为:1010+3*2=1016例如,通过a+3的地址可以找到a[3]元素,*(a+3)就是a[3]元素的值。因此下面二者等价:a[i]----下标法*(a+i)----地址法9.3.2一维数组的指针表示法

定义一个指针变量,并把这个指针指向该数组的起始地址,那么通过对指针的运算,就可以完成对数组的访问,这种方法被称为指针法。例如:

inta[5]={1,3,5,7,9},*ip;

ip=a;

++ip;【例9.3.1】分别用下标法、地址法、指针法访问数组元素。

#includestdio.h

main()

{inta[5]={1,3,5,7,9},i,*p;

for(i=0;i5;i++)printf(“%d”,a[i]);/*下标法*/

printf(“\n”);

for(i=0;i5;i++)printf(“%d”,*(a+i));/*地址法*/

printf(“\n”);

for(p=a;pa+5;p++)printf(“%d”,*p);/*指针法*/

}

9.3.3使用指针法应注意的问题

(1)在下标法、地址法、指针法3种方法中,指针法的效率最高。

(2)在使用指针访问数组元素时,系统不作“下标是否越界”的检查。

(3)使用指向数组元素的指针变量时,应当注意指针变量的当前值。

例如:

p=a;

for(i=0;i5;i++)scanf(%d,p++);

9.3.4应用指针法举例

【例9.5】从键盘输入若干天的温度值,求平均温度。要求用数组存放输入的若干个温度值,当输入完全部需要处理的温度值后,输入“0”表示输入结束,然后对已输入的温度求平均值。

用地址法编写程序如下:

main()

{floatt[31],s=0;

intn,d=0;/*d为输入数据计数值,n为实际输入的有效数据量*/

do{printf(请输入第%d天的温度值:,d+1);

scanf(%f,t+d);

}while(*(t+d++)!=0);

n=d-1; /*剔除输入的0*/

for(d=0;dn;d++)s+=*(t+d);/*统计n个数据的和值*/

printf(平均温度为:%4.1f,s/n);

}

可以用指针法改写上述程序,改动后的源程序如下:

main()

{floatt[31],s=0,*p=t;

intn,d=0;/*d为输入数据计数值,n为实际输入的有效数据量*/

do{printf(请输入第%d天的温度值:,++d);

scanf(%f,p);

}while(*(p++)!=0);

n=d-1; /*剔除输入的0*/

for(p=t;pt+n;p++)s+=*p; /*统计n个数据的和值*/

printf(平均温度为:%4.1f,s/n);

}

在程序中定义一个数组后,编译系统就会为它分配一个可以容纳数组中所有元素的存贮区,其中数组名代表这个数组的起始地址。那么在C语言中,数组各元素的地址是如何表示和计算的呢?下面讨论一下一维数组的地址表示法。引用一个数组元素,可以用两种不同的方法。一种是前面已经介绍的下标法,即指出数组名和下标值,系统就会找到该元素,如a[3]就是用下标法表示的数组元素。另一种是地址法,即通过相应的地址访问数组的某一元素。例如,通过a+3的地址可以找到a[3]元素,*(a+3)就是a[3]元素的值。因此下面二者等价:对于上面定义的数组,a的值就是数组a的起始地址(假设为1010),由于已定义数组a为整型数组,则a[0]的地址值也是a的值(1010),a[1]的地址可以用a+1表示,也就是说a+1指向数组a中下标为1的元素。同样,a+i是a[i]的地址。需要说明的是:在编译系统计算实际地址时,a+i中的i要乘上数组中每个元素所占的字节数,即:a+i*n(n为一个元素所

显示全部
相似文档