资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
学习目标(1)掌握指向一维数组的指针的用法。(2)掌握指向数组的指针作为函数参数传递的用法。C Programming Language指针与数组指针与数组l指针与数组的关系十分密切,数组名本身就是一个常量指针。当定义数组时,其首地址就已确定不再改变。l通过使用指针变量来指向数组中的不同元素,可使程序效率更高,执行速度更快。例如,对于数组arr10,数组名arr等效于地址&arr0。因此,可以将数组名arr看做一个指针,它永远指向arr0。C Programming Language指向一维数组的指针变量v一一个个数数组组存存储储在在一一块块连连续续内内存存单单元元中中;数数组组名名就就是是这这块块连连续内存单元的首地址;续内存单元的首地址;v第第(i+1)(i+1)个数组元素的地址可表示为个数组元素的地址可表示为&datai&datai或或( (data+idata+i) )。v可以通过以下方式为指向数组的指针赋值:可以通过以下方式为指向数组的指针赋值:v int *pa,a10;int *pa,a10;v pa=&a0; pa=&a0; /*/*或者或者 pa=a;*/pa=a;*/v一个指针变量可以指向一个数组元素一个指针变量可以指向一个数组元素v int *ptr,data10;int *ptr,data10; ptr=data+3;/*或者ptr=&data3*/C Programming Languagept+n与a+n表示数组元素an的地址,即&an。若指针变量pt已指向数组中的一个元素,则pt+1指向同一数组中的下一元素。pt+1所代表的地址值是pt+1d,d是每个数组元素所占的字节数。假设pt指向了一维数组a,那么C语言规定指针对数组的表示方法有如下几种。数组apt+2a+npt+na0pta1a2anapt+1a+1a+2C Programming Language*(pt+n)和*(a+n)表示pt+n或a+n指向的数组元素值,即等效于an。在编译时,对数组元素ai就是处理成*(a+i)。在C语言中是“变址运算符”,即将ai按a+i计算出地址,然后找出该地址单元的值。假设pt指向了一维数组a,那么C语言规定指针对数组的表示方法有如下几种。数组a*(pt+2)*(a+n)*(pt+n)a0*(pt+0)a1a2an*(a+0)*(pt+1)*(a+1)*(a+2)C Programming Language指向数组的指针变量也可用数组的下标形式表示为ptn,其效果相当于*(pt+n)。 引用一个数组元素的方法:下标法:即ai的形式。地址法:*(a+i)。其中a是数组名。指针法:即*(pt+i)或pti。其中pt是指向数组a的指针变量。假设pt指向了一维数组a,那么C语言规定指针对数组的表示方法有如下几种。C Programming Language指针变量可以实现本身的值的改变,这一点与数组名不同。如p+是合法的;而a+是错误的。指针变量可以指到数组以后的内存单元,系统并不认为非法,因此使用指针变量指向数组元素时,要特别注意指针变量所指向的位置。注意事项C Programming Language#include main() int *p,i,a10; p=a; for(i=0;i10;i+) *p+=i; /* 等价于*p=i;p+; */ for(i=0;i10;i+) printf(%6d,*p+);v程序运行结果:程序运行结果:v -222851 -242282-200 14917 21596 23619【例1】为数组a赋值后输出数组a的所有元素值。C Programming Languagemain() int *p,i,a10; p=a; for(i=0;i10;i+) *p+=i; p=a; /*在输出前使p重新指向数组a的首地址*/ for(i=0;i10;i+) printf(%6d,*p+);程序运行结果:0123456789改正后的程序C Programming Language *p+等价于*(p+)。若p当前指向a数组中的第i个元素,则*(+p)相当于a+i,*(p-)相当于ai-;*(-p)相当于a-i。 *(p+)与*(+p)作用不同。若p的初值为a,则*(p+)等价a0,*(+p)等价a1。 (*p)+表示p所指向的元素值加1。指针变量与自增自减运算符同时出现时的用法C Programming Language数组指针作函数参数数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。指针变量的值也是地址,也可以作为函数的参数进行传递。C Programming Language#include main()int i,a10,*pt=a,max; printf(please input array a:n); for(i=0;i10;i+) scanf(%d,&ai); max=sub_max(pt,10); printf(max=%dn,max);v程序运行结果:程序运行结果:vplease input array a:v2 5 1 7 6 8 4 3 9 0vmax=9【例2】求一维数组中的最大值,要求求最大值的功能通过函数实现。int sub_max(int b,int n)int temp,i; temp=b0; for(i=1;in;i+)if(tempbi) temp=bi; return temp;C Programming Languagemain()int i,a10,*pt=a,max;printf(please input array a:n);for(i=0;i10;i+) scanf(%d,&ai);max=sub_max(pt,10);printf(max=%dn,max);上述程序也可采用指针变量作sub_max函数的形式参数。int sub_max(int *b,int n) int temp,i; temp=b0; /*bi等价于*(b+i)*/ for(i=1;in;i+) if(tempbi) temp=bi; return temp;C Programming Language上述程序的sub_max函数中,数组元素还可以用指针表示。main()int i,a10,*pt=a,max; printf(please input array a:n); for(i=0;i10;i+) scanf(%d,&ai); max=sub_max(pt,10); printf(max=%dn,max);int sub_max(int *b,int n) int temp,i; temp=*b+; /*temp=*b;b+;*/ for(i=1;in;i+) if(temp*b) temp=*b;b+; return temp;小结(1)指针对数组的表示方法。 下标法:即ai的形式。地址法:*(a+i)。其中a是数组名。指针法:即*(pt+i)或pti。其中pt是指向数组a的指针变量。(2)指向数组的指针作为函数参数传递的用法。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号