指针和引用课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《指针和引用课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 引用 课件
- 资源描述:
-
1、1第1页,共48页。第六章第六章 指针和引用指针和引用2第2页,共48页。教学目标l(1)了解指针类型及引用类型的概念及二者的关了解指针类型及引用类型的概念及二者的关系与区别;系与区别;l(2)了解指针与引用变量的使用与操作方法;了解指针与引用变量的使用与操作方法;l(3)了解用指针访问变量、数组、字符串的方法。了解用指针访问变量、数组、字符串的方法。3第3页,共48页。基本内容 l6.1 指针指针l6.2 指针与数组指针与数组l6.3 引用引用4第4页,共48页。6.1 指针l6.1.1 地址地址l6.1.2 指针的定义指针的定义l6.1.3 指针的初始化指针的初始化l6.1.4 指针的使用
2、指针的使用l6.1.5 函数的传址调用方式函数的传址调用方式5第5页,共48页。6.1.1 地址计算机的内存储器就象一个一维数组,每个数组计算机的内存储器就象一个一维数组,每个数组元素就是一个存储单元。元素就是一个存储单元。地址是存放信息数据的内存单元的编号。地址是存放信息数据的内存单元的编号。程序中定义的任何变量、数组或函数等,在程序中定义的任何变量、数组或函数等,在编译时都会在内存中分配一个确定的地址单编译时都会在内存中分配一个确定的地址单元。元。6第6页,共48页。如何表示地址?如何表示地址?凡是存放在内存中的程序和数据都有一个地凡是存放在内存中的程序和数据都有一个地址,可以用它们占用的
3、那片存储单元中的第址,可以用它们占用的那片存储单元中的第一个存储单元的地址表示。一个存储单元的地址表示。C+规定:规定:l变量的地址变量的地址:可以用取地址运算符可以用取地址运算符&来获取来获取l数组的地址数组的地址:可以用数组名表示可以用数组名表示l函数的地址函数的地址:可以用函数名表示可以用函数名表示7第7页,共48页。例6-1:取地址运算符&和指针运算符*#include using namespace std;int main()int x=100;cout 变量的值是:变量的值是:x endl;cout 变量的所在的地址是:变量的所在的地址是:&x endl;cout 该地址所存储的
4、变量值为:该地址所存储的变量值为:*(&x)endl;return 0;8第8页,共48页。6.1.2 6.1.2 指针的定义指针的定义 数据类型数据类型 *指针变量名;指针变量名;例:例:int *ptr;float *array;char *s1,*s2;l说明:说明:l数据类型是指针所指向变量的类型;l*是一个说明符,它不是指针变量名的一部分,而是表示这里说明的是一个指针;l指针变量名是指针变量的名字9第9页,共48页。6.1.36.1.3 指针的初始化指针的初始化l指针在定义后必须指针在定义后必须初始化初始化才能使用;否则,结果不确定。才能使用;否则,结果不确定。l指针初始化的一般格式
5、:指针初始化的一般格式:数据类型数据类型 *指针变量名指针变量名 初始地址值;初始地址值;或或数据类型数据类型 *指针变量名;指针变量名;指针变量名指针变量名=数据对象地址;数据对象地址;l其中数据对象地址可以是变量、数组、函数、结构等的其中数据对象地址可以是变量、数组、函数、结构等的地址。如:地址。如:int x=7;int*ptr=&x;/指向单个变量指向单个变量char*sp;sp=“string”;/指向字符串指向字符串int a5,*ap;ap=a;/指向数组指向数组int max(),(*fp)();fp=max;/指向函数指向函数l编程中常用的初始化方法:编程中常用的初始化方法:
6、int*ptr=NULL;/初始化为空指针初始化为空指针10第10页,共48页。6.1.4 6.1.4 指针的使用指针的使用/例例6-2:通过指针访问变量:通过指针访问变量#include using namespace std;int main()int x=7;int *ptr;ptr=&x;coutx=xt&x=&xendl;cout*ptr=*ptrtptr=ptrendl;*ptr=9;coutx=xt&x=&xendl;cout*ptr=*ptrtptr=ptrendl;return 0;11第11页,共48页。6.1.5 函数的传址调用方式函数的传址调用方式 l实参与形参有实参与
7、形参有3种结合方式:种结合方式:l值调用、值调用、传址调用传址调用和引用调用和引用调用l传址调用赋予了函数操作传址调用赋予了函数操作“异地异地”数据的权利,数据的权利,对函数的独立性有一定影响对函数的独立性有一定影响l传址调用可实现多值传递传址调用可实现多值传递l使用传址调用方式时,被调用函数的形参是指使用传址调用方式时,被调用函数的形参是指针,与之对应的实参要用地址值。针,与之对应的实参要用地址值。12第12页,共48页。例例6-3 交换两个变量的值交换两个变量的值l算算 法:法:l交换两个变量交换两个变量x和和y的值一定要用到第三个变量的值一定要用到第三个变量t作作周转:周转:t=x;x=
8、y;y=t;13第13页,共48页。交换两个变量的值交换两个变量的值(修改前的程序修改前的程序)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&y:”endl;cout“x=“x“,y=“yendl;return 0;14第14页,共48页。交换两个变量的值(修改后)交换两个变量的值(修改后)#include using namespace std;void swap(int*xp,int*yp)int t
9、mp;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=2After exchange:a=2,b=115第15页,共48页。6.2 指针与数组l6.2.1 指针与一维数组指针与一维数组l6.2.2 指针与字符串指针与字符串16第16页,共48页。6.2.1 指针与一维
10、数组l计算机中处理数组时,实际上是将计算机中处理数组时,实际上是将ai转换成转换成*(a+下标表达式值)的形式。即下标表达式值)的形式。即 ai ai *(a+ia+i)因为数组名可以表示该数组的首地址,所以:因为数组名可以表示该数组的首地址,所以:ai ai *(a+ia+i)*(ptr+iptr+i)其中,其中,ptr是指向是指向a的指针。的指针。l由此可见,用指针处理数组及元素是最快捷的方式由此可见,用指针处理数组及元素是最快捷的方式17第17页,共48页。例例6-4 用多种方法输出数组元素用多种方法输出数组元素#include using namespace std;int main(
11、)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第18页,共48页。直接和间接使用变量19第19页,共48页。6.2.2 指针与字符串l指针指针-字符数组字符数组(字符串字符串)l例题分析例题分析l设设char*string;char string14;string=string1;l有有s
12、tring10=*stringstring11=*(string+1)20第20页,共48页。例例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第21页,共48页。6.3
13、 引用l6.3.1引用的概念引用的概念l6.3.2 函数的引用调用方式函数的引用调用方式22第22页,共48页。6.3.1引用的概念l引用是一种特殊类型的变量,可以被认为是另引用是一种特殊类型的变量,可以被认为是另一个变量的别名。一个变量的别名。l引用运算符引用运算符“&”用来说明一个引用。用来说明一个引用。数据类型数据类型&引用名引用名=已定义的变量名已定义的变量名l例:例:int a=10;int&i=a;i=i+100;23第23页,共48页。*和和&l注意:注意:*和和&出现在声明语句和执行语句中出现在声明语句和执行语句中其含义不同。其含义不同。l例如例如:int*ptr;y=*ptr
14、;int&ref;ptr=&x;*ptr=2;/说明符:声明说明符:声明ptr是一个是一个int型指针型指针/指针运算符:取指针指针运算符:取指针ptr所指向地址内存储的数值所指向地址内存储的数值/说明符:声明一个说明符:声明一个int型的引用型的引用ref/地址运算符:取变量地址运算符:取变量x的地址的地址24第24页,共48页。6.3.2 函数的引用调用方式l实参与形参有实参与形参有3种结合方式:种结合方式:l值调用、传址调用和值调用、传址调用和引用调用引用调用l在形参名前加上引用说明符在形参名前加上引用说明符“&”即将其声明为即将其声明为引用,实参则直接采用一般的变量名。引用,实参则直接
15、采用一般的变量名。l在函数调用时,形参就成了实参的别名,对引在函数调用时,形参就成了实参的别名,对引用的操作就等同于直接对主调函数中原变量的用的操作就等同于直接对主调函数中原变量的操作。操作。25第25页,共48页。#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;交换两个整形变量的
展开阅读全文