资源预览内容
第1页 / 共48页
第2页 / 共48页
第3页 / 共48页
第4页 / 共48页
第5页 / 共48页
第6页 / 共48页
第7页 / 共48页
第8页 / 共48页
第9页 / 共48页
第10页 / 共48页
第11页 / 共48页
第12页 / 共48页
第13页 / 共48页
第14页 / 共48页
第15页 / 共48页
第16页 / 共48页
第17页 / 共48页
第18页 / 共48页
第19页 / 共48页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,sfsf,。,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,sfsf,。,*,1,。,1。,第六章,指针和引用,2,。,第六章 指针和引用2。,教学目标,(1)了解指针类型及引用类型的概念及二者的关系与区别;,(2)了解指针与引用变量的使用与操作方法;,(3)了解用指针访问变量、数组、字符串的方法。,3,。,教学目标(1)了解指针类型及引用类型的概念及二者的关系与区,基本内容,6.1 指针,6.2 指针与数组,6.3 引用,4,。,基本内容 6.1 指针4。,6.1 指针,6.1.1 地址,6.1.2 指针的定义,6.1.3 指针的初始化,6.1.4 指针的使用,6.1.5 函数的传址调用方式,5,。,6.1 指针6.1.1 地址5。,6.1.1 地址,计算机的内存储器就象一个一维数组,每个数组元素就是一个存储单元。,地址是存放信息数据的内存单元的编号。,程序中定义的任何变量、数组或函数等,在编译时都会在内存中分配一个确定的地址单元。,6,。,6.1.1 地址计算机的内存储器就象一个一维数组,每个数组元,如何表示地址?,凡是存放在内存中的程序和数据都有一个地址,可以用它们占用的那片存储单元中的第一个存储单元的地址表示。,C,+规定:,变量的地址:可以用取地址运算符,&,来获取,数组的地址:可以用数组名表示,函数的地址:可以用函数名表示,7,。,如何表示地址?凡是存放在内存中的程序和数据都有一个地址,可以,例,6-1,:取地址运算符,&,和指针运算符*,#include,using namespace std;,int main(),int x=100;,cout,变量的值是:,x endl;,cout,变量的所在的地址是:,cout,该地址所存储的变量值为:,*(,return 0;,8,。,例6-1:取地址运算符&和指针运算符*#include i,6.1.2,指针的定义,数据类型 *指针变量名;,例:,int *ptr;float *array;char *s1,*s2;,说明:,数据类型是指针所指向变量的类型;,*是一个说明符,它不是指针变量名的一部分,而是表示这里说明的是一个指针;,指针变量名是指针变量的名字,9,。,6.1.2 指针的定义 数据类型 *指针变量名;9,6.1.3,指针的初始化,指针在定义后必须,初始化,才能使用;否则,结果不确定。,指针初始化的一般格式:,数据类型 *指针变量名 初始地址值;,或,数据类型 *指针变量名;,指针变量名=数据对象地址;,其中数据对象地址可以是变量、数组、函数、结构等的地址。如:,int x=7;int*ptr=/,指向单个变量,char*sp;sp=“string”;/,指向字符串,int a5,*ap;ap=a;/,指向数组,int max(),(*fp)();fp=max;/,指向函数,编程中常用的初始化方法:,int*ptr=NULL;/,初始化为空指针,10,。,6.1.3 指针的初始化指针在定义后必须初始化才能使用;否则,6.1.4,指针的使用,/,例,6-2,:通过指针访问变量,#include,using namespace std;,int main(),int x=7;,int *ptr;,ptr=,coutx=xt,cout*ptr=*ptrtptr=ptrendl;,*,ptr=9;,coutx=xt,cout*ptr=*ptrtptr=ptrendl;,return 0;,11,。,6.1.4 指针的使用/例6-2:通过指针访问变量11。,6.1.5,函数的传址调用方式,实参与形参有3种结合方式:,值调用、,传址调用,和引用调用,传址调用赋予了函数操作“异地”数据的权利,对函数的独立性有一定影响,传址调用可实现多值传递,使用传址调用方式时,被调用函数的形参是指针,与之对应的实参要用地址值。,12,。,6.1.5 函数的传址调用方式 实参与形参有3种结合方式:,例,6-3,交换两个变量的值,算 法:,交换两个变量,x,和,y,的值一定要用到第三个变量,t,作周转:,t=x;,x=y;,y=t;,13,。,例6-3 交换两个变量的值算 法:13。,交换两个变量的值,(,修改前的程序,),void swap(int x,int y),int tmp;,tmp=x;x=y;y=tmp;,int main(),int x=2,y=3;,cout“x=“x“,y=“yendl;,swap(x,y);,coutAfter exchange x,cout“x=“x“,y=“yendl;,return 0;,14,。,交换两个变量的值(修改前的程序)void swap(int,交换两个变量的值(修改后),#include,using namespace std;,void swap(,int*xp,int*yp,),int tmp;,tmp=*xp;*xp=*yp;*yp=tmp;,int main(),int a=2,b=3;,cout Before exchange,:,a=a ,,,b=b endl;,swap(,a,b,);,swap(,*a,*b,);,swap(,&a,&b,);,cout After exchange,:,a=a ,,,b=b endl;,return 0;,运行结果:,Before exchange,:,a=1,,,b=2,After exchange,:,a=2,,,b=1,15,。,交换两个变量的值(修改后)#include iostrea,6.2 指针与数组,6.2.1 指针与一维数组,6.2.2 指针与字符串,16,。,6.2 指针与数组6.2.1 指针与一维数组16。,6.2.1 指针与一维数组,计算机中处理数组时,实际上是将,ai,转换成,*(,a+,下标表达式值)的形式。即,ai *(a+i),因为数组名可以表示该数组的首地址,所以:,ai *(a+i)*(ptr+i),其中,,ptr,是指向,a,的指针。,由此可见,用指针处理数组及元素是最快捷的方式,17,。,6.2.1 指针与一维数组计算机中处理数组时,实际上是将a,例,6-4,用多种方法输出数组元素,#include,using namespace std;,int main(),int a=1,2,3,4,5;,/int*ptr;,/ptr=a;,for(int i=0;i5;i+),coutait;/,一般方法:使用数组名和下标,/cout*(a+i)t;/,使用数组名和指针运算,/*,cout*ptrt;/,使用指针变量的方法,ptr+;,*,/,coutendl;,return 0;,18,。,例6-4 用多种方法输出数组元素#include iost,直接和间接使用变量,19,。,直接和间接使用变量19。,6.2.2,指针与字符串,指针,-,字符数组,(,字符串,),例题分析,设,char*string;,char string14;,string=string1;,有,string10=*string,string11=*(string+1),20,。,6.2.2 指针与字符串指针-字符数组(字符串)20。,例,6-5,:计算字符串长度,#include,using namespace std;,int mystrlen(char*string),char*ptr=string;,while(*ptr!=0),ptr+;/,指针后移,直到指向字符串结束标志,return ptr-string;,int main(),char str=How long am I?;,coutstr,的长度是,mystrlen(str)endl;,return 0;,21,。,例6-5:计算字符串长度#include iostream,6.3 引用,6.3.1引用的概念,6.3.2 函数的引用调用方式,22,。,6.3 引用6.3.1引用的概念22。,6.3.1,引用的概念,引用是一种特殊类型的变量,可以被认为是另一个变量的别名。,引用运算符“,&,”,用来说明一个引用。,数据类型,&,引用名,=,已定义的变量名,例:,int a=10;,int,i=i+100;,23,。,6.3.1引用的概念引用是一种特殊类型的变量,可以被认为是另,*和,&,注意:,*,和,&,出现在声明语句和执行语句中其含义不同。,例如:,int*ptr;,y=*ptr;,int,ptr=,*ptr=2;,/,说明符:声明,ptr,是一个,int,型指针,/,指针运算符:取指针,ptr,所指向地址内存储的数值,/,说明符:声明一个,int,型的引用,ref,/,地址运算符:取变量,x,的地址,24,。,*和&注意:*和&出现在声明语句和执行语句中其含义不,6.3.2 函数的引用调用方式,实参与形参有3种结合方式:,值调用、传址调用和,引用调用,在形参名前加上引用说明符“,&”,即将其声明为引用,实参则直接采用一般的变量名。,在函数调用时,形参就成了实参的别名,对引用的操作就等同于直接对主调函数中原变量的操作。,25,。,6.3.2 函数的引用调用方式实参与形参有3种结合方式:2,#include,using namespace std;,void swap(,int&x,int&y,),int tmp=x;,x =y;,y =tmp;,int main(),int a=1,b=2;,cout Before exchange,:,a=a ,,,b=b endl;,swap(a,b);,cout After exchange,:,a=a ,,,b=b endl;,return 0;,交换两个整形变量的值,(,引用调用,),运行结果:,Before exchange,:,a=1,,,b=2,After exchange,:,a=2,,,b=1,26,。,#include 交换两个整形变量的值(,扩展阅读,6.4,动态存储分配,6.5,自定义数据类型,6.5.1,结构体类型,6.5.2,枚举类型,27,。,扩展阅读6.4 动态存储分配27。,6.4,动态存储分配,运算符,new,用来申请所需的内存,指针=,new,数据类型(初值),;,运算符,delete,用于释放先前申请到的存储块,delete,指针;,例:,int*p=new int(5);,delete p;,为数组申请动态内存:,指针=,new,数据类型数组元素个数,;,释放数组占用的动态内存空间:,delete,指针;,例:,int*p=new int size;,delete p;,28,。,6.4 动态存储分配运算符new用来申请所需的内存28。,例,6-8,:用动态数组来求斐波那挈数列的前,n,项,#include,using namespace std;,int main(),int n;,coutn;,int*p=new intn+1;,p0=0;,p1=1;,coutp0tp1t;,for(int i=2;i=n;i+),pi=pi-2+pi-1;,coutpi,结构体指针变量名,-,成员变量名,例:,Student stu1,stu2,*ptr=,stu1.id=20086035;,ptr-id=20091001;,34,。,结构体变量的使用结构体类型变量的成员变量的引用方法为:34。,结构体的初始化,可采用以下任意一种方式:,先声明结构体变量,再赋初值,Student stu1;,stu1.id=20086035;,strcpy(stu1.name,Zhang3);,stu1.score=96;,声明时赋值:在声明结构体变量的同时对其赋初值,Student stu2=20091001,Li4,85.5;,注意:不能在定义结构体类型时给成员变量赋值,35,。,结构体的初始化可采用以下任意一
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6