C++第3章指针_第1页
C++第3章指针_第2页
C++第3章指针_第3页
C++第3章指针_第4页
C++第3章指针_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第3章指针,VisualC+与面向对象程序设计教程,教学目标,介绍+中指针的基本概念。,学习要求,掌握指针的概念和定义方法。掌握指针的操作符和指针的运算掌握指针与数组的关系。掌握指针与字符串的关系。掌握new和delete操作符作用和使用方法。,授课内容,3.1地址与指针3.2指针运算3.3指针与数组3.4动态存储分配3.5指针和函数(自学内容),地址,计算机的内存储器就象一个一维数组,每个数组元素就是一个存储单元。地址是存放信息数据的内存单元的编号。程序中定义的任何变量、数组或函数等,在编译时都会在内存中分配一个确定的地址单元。C+规定:变量的地址:可以用取地址运算符float*array;char*s1,*s2;指针类型内存地址值是固定不变的,不同类型的指针本身所占据的存储区域都一样大。规定了用指针间接访问数据时的访问方式为指针的算术运算提供依据,指针声明的举例,指针在定义后必须初始化才能使用;否则,结果不确定。指针初始化的一般格式:指针变量名=数据对象;数据对象可以是变量、数组、函数、结构等。举例:int*ptr,i=10;ptr=/指向函数,3.2指针的运算,1“*”和“x=y;y=t;实参与形参有3种结合方式:值调用、地址调用和引用调用,例3.1交换两个变量的值,voidswap(intx,inty)inttmp;tmp=x;x=y;y=tmp;voidmain()intx=2,y=3;cout“x=“x“,y=“yendl;swap(x,y);coutAfterexchangex,例3.1交换两个变量的值(修改后),voidswap(int*xp,int*yp)inttmp;tmp=*xp;*xp=*yp;*yp=tmp;voidmain()intx=2,y=3;cout“x=“x“,y=“yendl;swap(,图3.4函数swap()中的运算结束时的内存分配示意图,指针变量的其他运算,指针赋值将一个指针赋值给另一个指针,结果是两个指针指向一个相同的地址单元。例如,jp=charstring6;令ptr=string;string1=*(ptr+1)qtr=ptr+strlen(string);,B,i,g,0,1000,1003,100010011002100310041005,例3.2字符串复制,算法分析令指针指向字符串1首地址将当前地址内容送字符串2串1地址+1重复、直到整个字符串复制完毕为止;用循环语句实现,结束条件是当前值不为0。,例3.2子函数,/Example6.2:复制字符串mystrcpy(char*destin,char*source)while(*source!=0)*destin=*source;source+;destin+;*destin=0;,例3.2主函数,/*-用于调试函数mystrcpy()的主函数-*/#includemain()chars181;chars2=Thisisasample.;mystrcpy(s1,s2);coutTheresultis:”s1endl;,例3.3数组清零,算法分析(用指针实现)令指针指向数组首地址向当前地址赋0值指针+重复、直到整个数组处理完毕为止;用循环语句实现,结束条件是循环N次,N是数组的元素个数。,例3.4数组清零,voidclear_array(float*ptr,intlen)float*qtr=ptr+len;while(ptrqtr)*ptr=0.0;ptr+;,指针与多维数组,#includevoidmain()inta33=1,2,3,4,5,6,7,8,9,i,j,*p;for(i=0;i3;i+)for(j=0;j3;j+)p=,指针与多维数组,#includevoidmain()inta33=1,2,3,4,5,6,7,8,9,i,j,*p;for(i=0;i3;i+)for(j=0;j3;j+)p=a0+i*3+j;cout*p;coutn;p=newintn+1;if(p=0|n=0)return;/如果没有申请到内存或数据输入有误,则返回p0=0;p1=1;coutp0endl;coutp1endl;for(inti=2;i=n;i+)pi=pi-2+pi-1;coutpiendl;deletep;,动态创建多维数组,voidmain()intm=3,n=4,*a;a=newint*m;for(inti=0;im;i+)ai=newintn;for(i=0;im;i+)for(intj=0;jn;j+)aij=(i+1)*10+(j+1);for(i=0;im;i+)for(intj=0;jn;j+)coutaij;cout=1,例3-5主函数,voidmain()coutendl;coutmonth_name(3);couty?x:y;voidmain()inta=5,b=3;coutmax=max(a,b)y?x:y;intmax(intx,inty);voidmain()inta=5,b=3;int(*p)(intx,inty)=max;coutmax=(*p)(a,b)endl;,调试技术:VisualC+的帮助功能,图6.7MSDN界面,程序设计举例,例3-8计算50的阶乘。算法求阶乘n!,当n较大时,由于计算机字长有限,不能直接机算,可采用数组的方法来实现。每个数组存放一位数字,假如我们用有100个元素的数组来计算,则精度可达100位,用这种方法就可以计算出n=50时的阶乘值。,例3-9编写一个字符串比较函数,算法intmystrnicmp(char*str1,char*str2,intn)例5-11介绍了字符串比较函数mystrcmp()的编写方法,但那时我们是通过下标对数组进行操作。其实,使用指针处理这类操作会更加方便。为了达到在比较时不区分大小写字母的目的,可以使用库函数toupper(),其原型为:inttoupper(intc);其中参数c为待转换的ASCII代码,如果c是一个小写字母,则该函数返回与其对应的大写字母。,上机练习题目,1编一程序,将字符串“Hello,C+!”赋给一个字符数组,然后从第一个字母开始间隔地输出该串(请用指针完成)。2编写程序,把10个浮点小数1.0、2.0、1.0赋予某个doublet型数组,然后用double型指针输出该数组元素的值。3编写一个函数,用于生成一个空字符串,其原型为:char*mystrspc(char*string,intn);其中参数string为字符串,n为空白字符串的长度(空格符的个数)。返回值为指向string的指针。4编写一个函数,用于去掉字符串尾部的空格符,其原型为:char*mytrim(char*string);其中参数string为字符串,返回值为指向string的指针。5编写一个函数,用于去掉字符串前面的空格,其原型为:char*myltrim(char*string);其中参数string为字符串,返回值为指向string的指针。,结束语,学好程序设计语言的唯一途径是上机练习。你的编程能力与你在计算机上投入的时间成正比。,例3-6通用数值积分函数,#include#includedoubleintegral(doublea,doubleb,double(*fun)(doublex),intn)doubleh=(b-a)/n;doublesum=(*fun)(a)+(*fun)(b)/2;inti;for(i=1;in;i+)sum+=(*fun)(a+i*h);sum*=h;ret

温馨提示

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

评论

0/150

提交评论