C高级语言程序设计第六篇_第1页
C高级语言程序设计第六篇_第2页
C高级语言程序设计第六篇_第3页
C高级语言程序设计第六篇_第4页
C高级语言程序设计第六篇_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2018/9/20,1,C,高级语言程序设计,第,6,章,指针和引用,北京邮电大学,信息与通信工程学院,北京邮电大学信息与通信工程学院,指针,Pointer,是,C,和,C,的一,种数据类型。很多其他高级语言,也有类似的数据类型。引用,Reference,则是,C,所特有的,一种数据类型。指针和引用在概,念上和使用上都有相似之处,但,是也有重要的差别,2018/9/20,2,北京邮电大学信息与通信工程学院,第六章,指针和引用,6.1,指针的概念,6.2,指针的运算,6.3,指针访问动态内存,6.4,指向结构体的指针,6.5,引用概念,6.6,指针和引用作为函数的参数,6.7,指针和引用作为函数

2、的返回值,6.8,指针和字符串,6.9,通过指针访问数组,2018/9/20,3,北京邮电大学信息与通信工程学院,6.1,指针的概念,2018/9/20,4,北京邮电大学信息与通信工程学院,2018/9/20,北京邮电大学信息与通信工程学院,5,6.1.1,指针和指针变量,指针是变量的地址。或者说是在内存中,存放,某种类型变量的地址,例如,定义了整型变量,a,a,的地址就是一个指,针,也可以不定义任何变量,只是指定内存某个地,址开始(如,0 x00430100,的,4,个字节存放整,型变量,这样的地址也是指针,存放指针的变量就是指针变量,2018/9/20,北京邮电大学信息与通信工程学院,6,

3、6.1.1,指针和指针变量,当声明了一个指针变量后,确定了三件事,变量本身在内存中所分配的地址和字节数,指针变,量总是占有,4,个字节,系统允许的地址范围,以及地址单元内可以存放的,内容,指针变量可以进行的运算,访问指针变量时,只能看到地址。只有通过这,个地址,才能访问地址单元中的内容。这样的,访问称为对于内存单元的,间接访问,2018/9/20,北京邮电大学信息与通信工程学院,7,6.1.2,指针变量的声明和初始化,指针变量声明的格式是,类型名,变量名,1,变量名,2,例如,int *va1, *va2,char *ch1, *ch2,指针变量在声明后,变量的值(地址)是随机,的,这样的指针

4、变量是不能安全的使用的,因,为其中的随机地址完全可能不是有效的数据地,址,2018/9/20,北京邮电大学信息与通信工程学院,8,6.1.2,指针变量的声明和初始化,在声明指针变量时的,,有两个含义,声明变量,va1,va2,ch1,ch2,都是指针变量,说明变量,va1,和,va2,的类型是,int,型,即,指向,整型变量的指针,va1,和,va2,所指定的地址单元中,只能存放整型数据。类似地,ch1,和,ch2,的类型是,char,型,它们所指定的地址单元中,只能存,放字符,指针变量都是有类型的,指针变量的类型就是它,所指定的地址单元中存放的数据的类型,2018/9/20,北京邮电大学信息

5、与通信工程学院,9,6.1.2,指针变量的声明和初始化,指针变量的初始化有两种方法:在声明时的初,始化和声明后的初始化,声明指针变量时就进行初始化的格式是,类型名,指针变量名,变量名,其中的变量名应该是已经声明或定义的同类型变量,名。例如,char ch1,Y,ch2,A,char *pch1,2018/9/20,北京邮电大学信息与通信工程学院,10,6.1.2,指针变量的声明和初始化,也可以在声明指针变量后,用赋值的方式对它,们进行初始化。例如,int i1,Y,i2,A,int *pi1, *pi2,pi1,pi2,没有初始化指针变量是不可以使用的。编译带,有这样的指针变量的程序,编译系统

6、会给出警,告,而运行时会出现错误,6.2,指针的运算,2018/9/20,11,北京邮电大学信息与通信工程学院,6.2,指针的运算,表,6.1,指针的运算,2018/9/20,12,北京邮电大学信息与通信工程学院,2018/9/20,北京邮电大学信息与通信工程学院,13,6.2.1,指针的赋值运算,指针的赋值运算一定是地址的赋值。用来对指针变量,赋值的可以是,同类型变量的地址,同类型的已经初始化的指针变量,其他同类型的指针,此外,也可以用,0,或者,NULL,对指针变量赋值。使得变,量包含的是“空指针”,即不指向任何的内存物理地,址,必须注意:不同类型的指针是不可以互相赋值的。在,指针赋值时,

7、不存在类型自动转换的机制,2018/9/20,北京邮电大学信息与通信工程学院,14,例,6.1,观察以下指针赋值运算的结果。如果将注释去,掉,结果将如何,include,using namespace std,void main(,int va1=100,*pva1,float vf1=A,*pvf1,*pvf2,int *pva2=NULL,coutvalue of pva1 is pva2endl,pva1,pvf1=pvf2,coutpva1,coutpvf1 pvf2endl,pvf1=pva1,value of pva1 is 0 x00000000,0 x0012FF7C 0 x0

8、012FF7C,0 x0012FF74 0 x0012FF74,注释去掉会出现编译错误,2018/9/20,北京邮电大学信息与通信工程学院,15,6.2.2,间接引用运算,间接引用运算符,是一种一元算符,它和,指针变量连用,对指针所指向的内存地址单元,进行间接访问。使用的格式是,指针变量,如果指针变量,iptr,指向整型变量,va,iptr,就是,变量,va,的内容,2018/9/20,北京邮电大学信息与通信工程学院,16,例,6.2,对变量的直接访问和间接访问:写出以下程序,运行结果,include,using namespace std,void main(,char ch1=a,*ch,

9、int k1=100,ch,指针,ch,指向变量,ch1,cout*ch=*chendl,间接访问,ch=B,coutch1=ch1endl,直接访问,ch1=k1,cout*ch=*chendl,间接访问,运行结果,ch=a,ch1=B,ch=d,2018/9/20,北京邮电大学信息与通信工程学院,17,例,6.3,定义指向指针的指针变量。观察对这种指针变量间,接访问的结果,include,using namespace std,void main(,int va=100,*pva,*ppva; /ppva,是指向指针的指针,int k1=100,pva,cout*pva=*pvaendl,

10、间接访问结果是,整型数,ppva,cout*ppva=*ppvaendl;,间接访问结果是,地址,coutpva=pvaendl,就是指针,pva,的内容,运行结果,pva=100,ppva=0 x0012FF7C,pva=0 x0012FF7C,2018/9/20,北京邮电大学信息与通信工程学院,18,6.2.2,间接引用运算,2018/9/20,北京邮电大学信息与通信工程学院,19,6.2.3,指针的算术运算,指针可以进行的算术运算只有加法和减法,指针可以和一个整数,n,做加法或者减法运算,指针,p,和整数,n,相加,相,减,的含义是指向当前,指向位置,p,的前方或后,方第,n,个数据的地

11、址,2018/9/20,北京邮电大学信息与通信工程学院,20,例,6.3,通过指针的间接访问,输出下标为偶数的数组元素,的值,include,using namespace std,void main(,int k110=11,24,37,44,58,66,79,86,93,108,*k,k,for(int i=0;i10;i=i+2,coutk1i=*(k+i),coutendl,运行结果,K10=11 k12=37,数组第一个元素(下标为,0,的地址赋值给指针,k,每次循环,指针加,2,2018/9/20,北京邮电大学信息与通信工程学院,21,6.2.3,指针的算术运算,指针和指针的直接加

12、法是没有意义的,也是不允许的,指针和指针的减法是可以进行的,其意,义是求出两个指针之间可以存放几个指,定类型的数据,不允许用一个整数减一个指针,2018/9/20,北京邮电大学信息与通信工程学院,22,6.2.4,指针的关系运算和逻辑运算,相同类型的指针可以进行各种关系运算。比较,两个指针相等还是不相等,进行指针“大于”、“小于”的比较,只是要,判定指针在内存中的相对位置,指针和一般的整数比较是没有意义的,也是不,允许的。惟一可以和指针比较的整数是,0,通,过指针和,0,的比较来判定指针本身是不是空指,针,2018/9/20,北京邮电大学信息与通信工程学院,23,6.2.5 void,类型指针

13、,void,类型的指针就是“无类型”指针。声明的,方式如下,void,指针名,void,类型的指针变量中存放的也是内存的地址,但是不指定这个地址单元内的数据的类型,2018/9/20,北京邮电大学信息与通信工程学院,24,6.2.5 void,类型指针,void,类型的指针的使用,任何其他类型的指针都可以赋值给,void,指针。必须,注意,这样赋值后的,void,指针的类型仍然是,void,void,类型指针不可以直接赋值给任何其他类型的指,针,无论何时,void,指针都不可以通过间接引用来访问,内存中的数据,要通过,void,类型指针访问内存的数据,必须进行指,针类型的强制转换,才可以通过指

14、针间接引用访问,内存数据,2018/9/20,北京邮电大学信息与通信工程学院,25,void,类型指针,void,类型指针还有一个具体的应用:显示字符,指针的内容。除了字符指针外,其他指针都可,以直接用,cout,语句来输出地址值。但是,用,cout,输出字符指针时,则是输出它所指向的字,符串。可以将字符指针强制转换为,void,指针,再用,cout,语句输出,就可以看到地址值。如,char *pch=Hello C,coutpchendl,cout(void*)pchendl,2018/9/20,北京邮电大学信息与通信工程学院,26,例,6.4,使用,memcpy,通用复制函数复制数组,in

15、clude,using namespace std,include,void main(,char src10= 345678,char dest10,char* pc=(char*)memcpy(dest,src,10,cout pc endl,int s13=1,2,3,int d13,int *pi=(int*)memcpy(d1,s1,12,cout*pi *(pi+1) *(pi+2)endl,运行结果,012345678,1 2 3,复制字符数据,10,个,字节,复制整型数据,12,个,字节,2018/9/20,北京邮电大学信息与通信工程学院,27,6.2.6,指针类型转换,实际应

16、用的指针变量都是有类型的,指针类型就是,指针所指的地址空间所存放的数据的类型,除了,void,指针,不同类型的指针是不可以自动类,型转换的,也就不能进行赋值运算。在例,6-1,中的,语句,pvf1=pva1,整型指针赋值给,float,指针,就是,有语法错误的语句,指针类型不仅不能自动转换,也不能进行强制类型,转换,2018/9/20,北京邮电大学信息与通信工程学院,28,指针类型转换,若,pch,是字符指针,p,是,double,类型指针,以下的语,句,pch=static_cast(p,在编译时有语法错误:“不能将,double,转换为,char*”,也就是说指针的强制类型转换也是不允许,

17、的,但是,如果使用,C,风格的类型转换,pch=(char*)p,在编译时没有语法错误,仅在执行时有问题,所以,还是要使用,static_cast,来进行强制类型转换,唯一允许的是,void,指针和其它指针类型之间的转换,2018/9/20,北京邮电大学信息与通信工程学院,29,例,6-5,利用格式控制符,hex,可以显示整数的机器数的程序,include,using namespace std,void main(,float f=1.0,float* fPtr=,浮点指针,void* fv,int* iPtr=static_cast(fv,浮点变量地址赋给整型指针,cout f endl,

18、*iPtr,hex*iPtrendl,*fPtr endl,6.3,指针访问动态内存,2018/9/20,30,北京邮电大学信息与通信工程学院,指针访问动态内存,动态内存是在程序执行时才可以申请、使用和,释放的内存。也就是存放动态数据的内存区域,存放动态数据的区域称为“堆”,动态内存也,称为堆内存,动态内存不能通过变量名来使用,而只能通过,指针来使用,2018/9/20,31,北京邮电大学信息与通信工程学院,2018/9/20,北京邮电大学信息与通信工程学院,32,6.3.1,动态内存的申请和释放,C,中通过运算符,new,申请动态内存,运算符,delete,释放动态内存,动态内存申请运算符,

19、new,的使用格式,new,类型名,初值,运算的结果:如果申请成功,返回指定类型内存的,地址;如果申请失败,返回,NULL,指针,动态内存使用完毕后,要用,delete,运算来释放,delete,运算符使用格式,delete,指针名,2018/9/20,北京邮电大学信息与通信工程学院,33,6.3.2,动态数组空间的申请和释放,申请动态一维数组时,要在,new,表达式中加上,申请数组的大小,new,类型名,常量表达式,注意:在动态申请数组空间时,不可以对数组进行,初始化,也可以申请二维数组的空间,int (*pi_marray)4,pi_marray = new int34,释放动态数组空间都

20、用相同的表达式,delete,指针名,2018/9/20,北京邮电大学信息与通信工程学院,34,6.3.3,内存泄漏和指针悬挂,内存泄漏是指动态申请的内存空间,没有正常,释放,但是也不能继续使用的情况。如,char *ch1,ch1 = new char(A,char *ch2 = new char,ch1=ch2,原来为,ch1,所申请的存放字符,A,的空间就不可能再,使用了,产生了内存泄漏,2018/9/20,北京邮电大学信息与通信工程学院,35,6.3.3,内存泄漏和指针悬挂,让指针指向一个已经释放的空间,即所谓的指,针悬挂,Dangling,如,char *ch1, *ch2,ch1

21、= new char,ch2 = ch1,ch2 = B,delete ch1,指针,ch2,就是指向了一个已经释放的地址空间,形成,指针悬挂。如果还要用,delete,ch2,语句来释放,ch2,所指向的空间,就会出现运行错误,6.4,指向结构体的指针,2018/9/20,36,北京邮电大学信息与通信工程学院,指向结构体的指针,定义变量时,我们可以定义指向,int,型的指针变,量,类似的,可以有指向新定义的结构型数据,类型的指针变量,声明了指向结构的指针后,必须对指针初始化,现在我们知道对于指针的初始化有两种方法,其一是用已经定义的变量地址来初始化,其二,是用,new,申请一个地址来对指针赋

22、值,2018/9/20,37,北京邮电大学信息与通信工程学院,2018/9/20,北京邮电大学信息与通信工程学院,38,具体对结构指针来说,1,可以将结构变量的地址赋给结构指针,使用取地址“,操作,得到结构变量的地址,这个地址就是结构的第一个成,员的地址,例如,struct student,声明新的数据类型,long num,学号,char name20,姓名,float score,成绩,student stu=20041118,Li Li,F,18,定义结构变量并初始化,student * ps,定义结构指针并初始化,2018/9/20,北京邮电大学信息与通信工程学院,39,2,使用,ne

23、w,操作在堆中给结构指针分配空间,例如,student * ps=new student,定义结构指针用动态地址初始化,用结构指针访问结构成员时,用箭头操作符代替,原来的点操作符对结构体成员进行操作。比如,把,学生的成绩输出显示,语句如下,coutscore,其中,ps-score,等价于,*ps).score,2018/9/20,北京邮电大学信息与通信工程学院,40,解:说明:每个员工的信息包括姓名、工作证号、薪水,定义,为结构类型。定义结构指针并让它的指向确定,通过结构指,针访问结构成员,输出显示员工的信息,例,6-6,结构指针的定义和使用,include,include,using na

24、mespace std,struct Employee,char name20,unsigned long id,float salary,例,6-6,结构指针的定义和使用,2018/9/20,北京邮电大学信息与通信工程学院,41,void main(,Employee pr1,Employee* prPtr,prPtr,strcpy(prPtr-name,zhang san,prPtr-id=98001,prPtr-salary=3350.0,cout,name,id,salary endl,程序运行结果,zhang san 98001 3350,6.5,引用概念,2018/9/20,42,

25、北京邮电大学信息与通信工程学院,2018/9/20,北京邮电大学信息与通信工程学院,43,引用概念,引用,Reference,是,C,中新引入的概念,也是,C,语言中不存在的数据类型,引用是变量或者其他编程实体(如对象)的别名,因此,引用是不可以单独定义的。如图,6.4(a,所示,变量,A,在内存中有自己的地址,而,A,的引用,B,实际,上就是变量,A,只是,A,的另外一个名字,2018/9/20,北京邮电大学信息与通信工程学院,44,6.5.1,引用的声明,引用是通过运算符,来定义的,定义的格式如下,类型名,引用名,变量名,其中的变量名必须是已经定义的,并且和引用的,类型必须相同。例如,in

26、t someInt,int,必须注意:引用必须在声明的时候就完成初始化,不可以先声明引用,然后再用另一个语句对它初,始化,2018/9/20,北京邮电大学信息与通信工程学院,45,引用有以下的特点,引用不能独立存在,它只是其他变量的别名,引用必须在声明的同时就初始化,引用一旦定义,引用关系就不可以更改,即,B,若,是,A,的引用,就不可能是其他变量的引用,引用的类型就是相关的变量的类型,引用的使用,和变量的使用相同,2018/9/20,北京邮电大学信息与通信工程学院,46,例,6-7,引用的使用。观察以下程序的结果,include,using namespace std,void main(,

27、int intA=10,int,潣瑵,引用的值和相关变量值相同,refA=refAendl,refA=5,潣瑵,引,用,的,变,化,则,相,关,变,量,也,变,化,intA=intAendl,潣瑵,引用的地址和相关变量地址相同,intA,的地址,潣瑵,引用的地址和相关变量地址相同,refA,的地址,6.5.2,引用的使用,2018/9/20,北京邮电大学信息与通信工程学院,47,引用的值和相关变量值相同,refA=10,引用的变化,则相关变量也变化,intA=5,引用的地址和相关变量地址相同,intA,的地址,0 x0012FF7C,引用的地址和相关变量地址相同,refA,的地址,0 x001

28、2FF7C,程序的结果,6.6,指针和引用作为函数,的参数,2018/9/20,48,北京邮电大学信息与通信工程学院,2018/9/20,北京邮电大学信息与通信工程学院,49,指针和函数,在程序设计中,指针有很多应用。其中,之一就是用指针作为函数的参数,从而,形成了,C,函数调用中的另一种调用方,式:地址调用,2018/9/20,北京邮电大学信息与通信工程学院,50,6.6.1,指针作为函数的参数,用指针作为函数参数,实现地址调用,必须满,足以下条件,函数的形式参数是指针变量,函数的实参数是内存的地址,具体来说可以,是数组名、变量的地址、用变量地址初始化,的指针,形参指针类型和实参地址类型必须

29、相同,2018/9/20,北京邮电大学信息与通信工程学院,51,6.6.1,指针作为函数的参数,满足以上条件后,这样的函数调用在使用上有,以下的特点,实参传递给形参的是内存的地址,所以形参指,针指向实参变量,形参指针通过间接引用,直接访问实参变量,包括改变实参变量的值,函数调用后,可以保留对实参变量的操作结果,如果有多个实参,就可以有多个实参变量在函,数调用中得到修改,2018/9/20,北京邮电大学信息与通信工程学院,52,例,6.8,编写数据交换的函数。在,main,中调用这个函数,交换,main,中定义的变量,include,using namespace std,void Swap(i

30、nt *a, int *b,void main(,int x(5), y(10,潣瑵,主函数变量的值,x=x y=yendl,Swap,潣瑵,返回后变量的值,x=x y=yendl,void Swap(int *a, int *b,int t,t=*a,a=*b,b=t,挠畯?尼,函数中完成了交换,a=*a *b=*bendl,运行结果,主函数变量的值,x=5 y=10,函数中完成了交换,a=10 *b=5,返回后变量的值,x=10 y=5,变量的地址作为实参数,指针变量作为形式参数,2018/9/20,北京邮电大学信息与通信工程学院,53,6.6.1,指针作为函数的参数,程序中用变量,x,和

31、,y,的地址作实参,传递给指针,a,和,b,如图,6.1(a,通过间接引用,a,和,b,进,行交换,实际上就是,x,和,y,进行交换,如图,6.1(b,2018/9/20,北京邮电大学信息与通信工程学院,54,6.6.2,引用作为函数参数,引用使用最多的场合是作为函数的形式参数,引用作为函数的形式参数具有以下的特点,引用作为形式参数时,实参数是相同类型的变量,引用作为形式参数,参数传递属于地址传递,引用作为形式参数时,在函数中并不产生实参数的,副本,形式参数的引用和实参数的变量实际上是同,一个实体,函数对引用的操作,也是对实参变量的操作,函数,调用可以改变实参数的值,2018/9/20,北京邮

32、电大学信息与通信工程学院,55,例,6.9,用引用作为形式参数,通过函数调用,交换两个实,参数,include,using namespace std,void swap_1(int i size; i+, j,resultj = listi,return result,返,回局部数组的地址,2018/9/20,北京邮电大学信息与通信工程学院,65,void printArray(int const *list, const int size,for (int i = 0; i size; i,cout listi,void main(,int list = 1, 2, 3, 4, 5, 6,

33、int *pList = reverse(list, 6);,获得倒序后数组的地址,printArray(pList, 6,显示倒序后的数组,程序运行结果,858993460,858993460,858993460,858993460,858993460 5,结果完全不对。原因就在于指针函数返回的是函数局部数组,的地址,2018/9/20,北京邮电大学信息与通信工程学院,66,例,6-16,对例,6-15,的修改。只要修改指针函数,reverse,可以在函数这申请一个动态数组的地址,最后返回这个地,址就可以。注意不要忘了用,delete,来释放这个地址,include,using namesp

34、ace std,int * reverse(int const * list, const int size,指针函数,int *result = new intsize,函数中定义的动态数组,for (int i = 0, j = size - 1; i size; i+, j,resultj = listi,return result,返回动态数组的地址,2018/9/20,北京邮电大学信息与通信工程学院,67,void printArray(int const *list, const int size,for (int i = 0; i size; i,cout listi,void

35、main(,int list = 1, 2, 3, 4, 5, 6,int *pList = reverse(list, 6,获得倒序后数组的地址,printArray(pList, 6,显示倒序后的数组,delete pList,程序运行结果,6 5 4 3 2 1,2018/9/20,北京邮电大学信息与通信工程学院,68,6.7.2,用引用作为函数的返回值,返回引用有以下需要注意的地方,返回引用需要在函数的返回值类型中加以说明,形,式为,类型名,函数名,形式参数表,返回引用的返回语句就是,return,变量名,返回引用实际是返回地址。在使用上,或者直接使,用这个地址;或者使用这个地址单元的

36、数据,返回的引用可以作为左值继续操作,而返回的变量,值是不可以继续运算的。这是返回引用和返回变量,值在使用上的主要区别,2018/9/20,例,6-17,引用作为函数的返回值,include,include,using namespace std,struct person,char name15,int contribution,double bonus,定义结构体,person p1=Li Li,500,0,p2=Zhao Zhao,600,0,两,名职工是全局变量,person *,n=sizeof(array3,strncpy( array3, array1, n-1,复制,array

37、1,的,n-1,个字符到,array3,array3 14 = 0,添加,0,到,array3,cout The string in array3 is: array3 endl,不包括提示的运行结果,Happy Birthday to You,Happy Birthday to You,Happy Birthday,复制,array1,到,array2,没有问题,复制,array1,到,array3,空间不够,有运行错误,按实际数组大小,复制,array1,到,array3,没有问题,6.9,通过指针访问数组,2018/9/20,77,北京邮电大学信息与通信工程学院,2018/9/20,北京

38、邮电大学信息与通信工程学院,78,通过指针访问数组,指针和数组有天然的联系。因为数组名本身,就是地址,也就是某种类型的指针。将指针,和数组名联系起来,访问数组就多了一种方,法,虽然一维数组名和二维数组名都是地址,都,可以看作是某种指针,但是指针的类型是不,同的。因此,通过指针访问一维数组和二维,数组的方法是不同的,2018/9/20,北京邮电大学信息与通信工程学院,79,6.9.1,通过指针访问一维数组,要通过指针访问一维数组,必须首先声明一个和,数组类型相同的指针,并且用数组名来对指针初,始化,如,int A10, *pa=A,然后,就可以用多种方式访问数组元素,数组名和下标,如,A0,A4

39、,指针和下标,如,pa0,pa4,指针加偏移量的间接引用,如,pa+4,数组名加偏移量的间接引用,如,A+4,指针自加后的间接引用,如,pa,2018/9/20,北京邮电大学信息与通信工程学院,80,例,6.19,求数组内所存放的字符串的长度,include,using namespace std,void main(,char ChArray=This is a string.,*ptch,int i,j,k,offset1,offset2,ptch=ChArray,指针初始化,for(i=0;ChArrayi!=0;i,coutThe length of the string is:ien

40、dl,for(j=0;ptchj!=0;j,coutThe length of the string is:jendl,for(offset1=0;*(ChArray+offset1)!=0;offset1,coutThe length of the string is:offset1endl,for(offset2=0;*(ptch+offset2)!=0;offset2,coutThe length of the string is:offset2endl,for(k=0;*ptch+!=0;k,coutThe length of the string is:kendl,运行结果,都相同,

41、方式,1,数组名和下,标,方式,2,指针和下,标,方式,3,数组名加,偏移量的间接引用,方式,4,指针加偏,移量的间接引用,方式,5,指针自加,的间接引用,2018/9/20,北京邮电大学信息与通信工程学院,81,例,6.20,求整型数组的平均值,显示数组元素和平均值,include,using namespace std,void main(,int intArray10=8,11,23,34,45,56,65,78,86,97,*ptint,int i,num,sum,float average,ptint=intArray,sum=0,num=sizeof(intArray)/sizeof(*intArray,for(i=0;inum;i,sum=sum+*ptint,average=(float)sum/num,ptint=intArray,潣瑵,数组元素是,n,for(i=0;inum;i,cout*ptint+,co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论