资源描述
学习目标(1)掌握指向一维数组的指针的用法。(2)掌握指向数组的指针作为函数参数传递的用法。(1)掌握指向一维数组的指针的用法。C Programming Language指针与数组指针与数组v指针与数组的关系十分密切,数组名本身就是一个常量指针。当定义数组时,其首地址就已确定不再改变。v通过使用指针变量来指向数组中的不同元素,可使程序效率更高,执行速度更快。例如,对于数组arr10,数组名arr等效于地址&arr0。因此,可以将数组名arr看做一个指针,它永远指向arr0。指针与数组指针与数组的关系十分密切,数组名本身就是一个常量C Programming Language指向一维数组的指针变量一个数组存储在一块连续内存单元中;数组名就是这块连续内存单元的首地址;第(i+1)个数组元素的地址可表示为&datai或(data+i)。可以通过以下方式为指向数组的指针赋值:int*pa,a10;pa=&a0;/*或者 pa=a;*/一个指针变量可以指向一个数组元素 int*ptr,data10;ptr=data+3;/*或者ptr=&data3*/指向一维数组的指针变量一个数组存储在一块连续内存单元中;数组C Programming Languagept+n与a+n表示数组元素an的地址,即&an。v若指针变量pt已指向数组中的一个元素,则pt+1指向同一数组中的下一元素。vpt+1所代表的地址值是pt+1d,d是每个数组元素所占的字节数。假设pt指向了一维数组a,那么C语言规定指针对数组的表示方法有如下几种。数组apt+2a+npt+na0pta1a2anapt+1a+1a+2pt+n与a+n表示数组元素an的地址,即&an。C Programming Language*(pt+n)和*(a+n)表示pt+n或a+n指向的数组元素值,即等效于an。v在编译时,对数组元素ai就是处理成*(a+i)。v在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)*(pt+n)和*(a+n)表示pt+n或a+n指向的数组C Programming Language指向数组的指针变量也可用数组的下标形式表示为ptn,其效果相当于*(pt+n)。引用一个数组元素的方法:下标法:即ai的形式。地址法:*(a+i)。其中a是数组名。指针法:即*(pt+i)或pti。其中pt是指向数组a的指针变量。假设pt指向了一维数组a,那么C语言规定指针对数组的表示方法有如下几种。指向数组的指针变量也可用数组的下标形式表示为ptn,其C Programming Language指针变量可以实现本身的值的改变,这一点与数组名不同。如p+是合法的;而a+是错误的。指针变量可以指到数组以后的内存单元,系统并不认为非法,因此使用指针变量指向数组元素时,要特别注意指针变量所指向的位置。注意事项指针变量可以实现本身的值的改变,这一点与数组名不同。如p+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+);程序运行结果:-222851 -242282-200 14917 21596 23619【例1】为数组a赋值后输出数组a的所有元素值。#include 程序运行结果:【例1】为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改正后的程序main()程序运行结果:改正后的程序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。指针变量与自增自减运算符同时出现时的用法*p+等价于*(p+)。若p当前指向a数组中的第i个C Programming Language数组指针作函数参数v数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。v指针变量的值也是地址,也可以作为函数的参数进行传递。数组指针作函数参数数组名就是数组的首地址,实参向形参传送数组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);程序运行结果:please input array a:2 5 1 7 6 8 4 3 9 0max=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;#include 程序运行结果:【例2】求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;main()上述程序也可采用指针变量作sub_max函数的形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;上述程序的sub_max函数中,数组元素还可以用指针表示。m小结(1)指针对数组的表示方法。下标法:即ai的形式。地址法:*(a+i)。其中a是数组名。指针法:即*(pt+i)或pti。其中pt是指向数组a的指针变量。(2)指向数组的指针作为函数参数传递的用法。小结(1)指针对数组的表示方法。
展开阅读全文