《指针的定义与应用》PPT课件.ppt_第1页
《指针的定义与应用》PPT课件.ppt_第2页
《指针的定义与应用》PPT课件.ppt_第3页
《指针的定义与应用》PPT课件.ppt_第4页
《指针的定义与应用》PPT课件.ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第15章指针,西南交通大学软件学院计算机基础教研室,C+编程导论,2,本章主要内容,C+中指针的基本概念指针类型变量的定义方法指针与地址运算符指针变量赋值、指针的运算通过指针类型的变量去访问某个变量或数组元素的值引用动态分配内存按引用调用,3,什么是地址?,计算机的内存储器就象一个巨大的一维数组,每个数组元素就是一个存储单元(在微型计算机中其大小通常为一个字节)。就象数组中的每个元素都有一个下标一样,每个内存单元都有一个编号,又称地址。,4,什么是地址?,在运行一个程序时,程序本身及其所用到的数据都要放在内存储器中:程序、函数、变量、常数、数组和对象等,在内存储器中占有一席之地。存放在内存储器中的程序和数据都有一个地址,用它们占用的那片存储单元中的第一个存储单元的地址表示。,5,什么是地址?,在C+中,为某个变量或者函数分配内存储器的工作由编译程序完成。内存地址的访问方式直接访问方式:通过变量名访问间接访问方式:通过地址访问,6,如何知道某个变量、数组、函数的地址,+规定:变量的地址可以使用地址运算符函数的地址用函数名表示。,7,什么是指针,指针是C+语言中的一种数据类型,是专门用来处理地址的。指针是某个内存单元的首地址。,8,什么是指针变量?,指针变量是包含另一个变量地址的变量。指针变量也是一个变量,遵循先定义,后使用。定义指针变量的类型是由该指针指向的变量类型决定。,9,指针变量的概念,定义例:inti;int*i_pointer;指向整型变量的指针,10,指针变量的声明,变量的指针:变量在内存中的存放起始地址指针变量的声明:类型标识符*指针变量例如:int*p;定义语句中的“*”表示该变量为指针变量一个指针变量只能存储同一种类型变量的地址,11,指针变量的初始化,语法形式类型标识符*指针名初始地址;例:int*pa=,12,指针变量的初始化,注意事项用变量地址作为初值时,该变量必须在指针初始化之前定义。如:inta;int*pa=,13,指针与地址运算符,“,14,指针与地址运算符,*出现在声明语句和执行语句中的含义是不同的。int*p;/*在声明语句中表示声明的是指针,声明p是整型指针coutai;for(i=0;i10;i+)cout*(a+i);for(p=a;p-a10;p+)cout*p;p=a;for(i=0;i10;i+)cout*pa;coute;cout*pb;,30,for(pa=a,pc=c;paa+d;pa+)for(pb=b;pbb+e;pb+)if(*pa=*pb)*pc+=*pa;f+;break;cout交集c的各个元素依次为:endl;for(pc=c;pcc+f;pc+)coutsetw(3)*pa;coute;cout*pb;,33,for(pa=a,pc=c;pa=a+d)*pc+=*pb;f+;cout“并集c的各个元素依次为:endl;for(pc=c;pcc+f;pc+)coutsetw(3)p2;正确的/等价于cina;,36,字符指针的定义、赋值和引用-例5,#include#includeusingnamespacestd;voidmain()char*p,sa20,sb20;inti;p=sa;strcpy(sa,“TodayisSunday.”);for(i=0;*(sa+i)!=0;i+)sbi=*p+;sbi=0;p=sb;coutp;,37,动态存储分配,静态存储分配:程序中使用的变量和数组的类型、数目、大小是由编写程序时确定的,程序运行时这些数据占用的存储空间数也是一定的。缺点:程序无法在运行时根据具体情况(如用户输入)灵活调整存储分配情况。动态存储分配:使用指针、运算符new和delete,在程序运行期间按照实际需要申请适量内存,克服了静态存储分配的缺点。,38,动态申请内存操作符new,=new=new()功能:在程序执行期间,申请用于存放类型对象的内存空间,并依初值列表赋以初值。结果值:成功:类型的指针,指向新分配的内存首地址。失败:0(NULL),39,动态申请内存操作符new,例如:intx,*p=newint(6);x=*p;coutx*pn;if(p=newintn)=0)cout“cantallocatememory.”endl;exit(1);for(i=0;in;i+)pi=i*2;cout“nowoutputthearray:”endl;for(i=0;in;i+)coutpi“;coutendl;deletep;,运行结果为:pleaseinputthelengthofthearray:6nowoutputthearray:0246810,46,引用,声明引用的格式类型/有声明语句,47,按引用调用,C+用两种方式向函数传递数值:值调用引用调用按引用调用时,调用者让被调用函数能够直接访问调用者的数据,并允许被调用函数能够修改其中的数据。按引用调用分为用引用参数按引用调用和用指针参数按引用调用。,48,按引用调用,用引用参数是其相应参数的别名。要表示函数的参数是按引用传递的,在函数原型和函数头中该参数类型后面加上voidcubeByReference(int,51,用引用参数按引用调用-例7,voidcubeByReference(int,52,用指针参数按引用调用-例8,#includeusingnamespacestd;voidcubeByReference(int*);voidmain()intz=4;coutz=ai;invert(a,10);coutThesortednumbersis:endl;for(i=0;i10;i+)coutaiendl;return0;,60,指向数组的指针变量作为函数参数,将一组同类型的数据(数组)从一个函数传递到另一个函数,可以采用数组名作为函数参数,也可以采用指向数组的指针变量作为函数参数。当函数的形参为指向数组的指针时,函数的实参即可以是数组名,也可以是指向数组起始地址的指针变量。,61,例10,将一个数组中的数据按相反顺序存放。,#includeusingnamespacestd;voidinvert

温馨提示

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

评论

0/150

提交评论