计算机程序设计基础精讲多练第章.ppt
《计算机程序设计基础精讲多练第章.ppt》由会员分享,可在线阅读,更多相关《计算机程序设计基础精讲多练第章.ppt(48页珍藏版)》请在三一办公上搜索。
1、,第六章 指针和引用,3,教学目标,(1)了解指针类型及引用类型的概念及二者的关系与区别;(2)了解指针与引用变量的使用与操作方法;(3)了解用指针访问变量、数组、字符串的方法。,4,基本内容,6.1 指针6.2 指针与数组6.3 引用,5,6.1 指针,6.1.1 地址6.1.2 指针的定义6.1.3 指针的初始化6.1.4 指针的使用6.1.5 函数的传址调用方式,6,6.1.1 地址,计算机的内存储器就象一个一维数组,每个数组元素就是一个存储单元。地址是存放信息数据的内存单元的编号。程序中定义的任何变量、数组或函数等,在编译时都会在内存中分配一个确定的地址单元。,7,如何表示地址?,凡是
2、存放在内存中的程序和数据都有一个地址,可以用它们占用的那片存储单元中的第一个存储单元的地址表示。C+规定:变量的地址:可以用取地址运算符&来获取数组的地址:可以用数组名表示函数的地址:可以用函数名表示,8,例6-1:取地址运算符&和指针运算符*,#include using namespace std;int main()int x=100;cout 变量的值是:x endl;cout 变量的所在的地址是:,9,6.1.2 指针的定义,数据类型*指针变量名;例:int*ptr;float*array;char*s1,*s2;说明:数据类型是指针所指向变量的类型;*是一个说明符,它不是指针变量名
3、的一部分,而是表示这里说明的是一个指针;指针变量名是指针变量的名字,10,指针的初始化,指针在定义后必须初始化才能使用;否则,结果不确定。指针初始化的一般格式:数据类型*指针变量名 初始地址值;或数据类型*指针变量名;指针变量名=数据对象地址;其中数据对象地址可以是变量、数组、函数、结构等的地址。如:int x=7;int*ptr=/初始化为空指针,11,6.1.4 指针的使用,/例6-2:通过指针访问变量#include using namespace std;int main()int x=7;int*ptr;ptr=,12,6.1.5 函数的传址调用方式,实参与形参有3种结合方式:值调用
4、、传址调用和引用调用传址调用赋予了函数操作“异地”数据的权利,对函数的独立性有一定影响传址调用可实现多值传递使用传址调用方式时,被调用函数的形参是指针,与之对应的实参要用地址值。,13,例6-3 交换两个变量的值,算 法:交换两个变量x和y的值一定要用到第三个变量t作周转:t=x;x=y;y=t;,14,交换两个变量的值(修改前的程序),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,15,交换两个变量的值
5、(修改后),#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(,运行结果:Before exchange:a=1,b=2After exchange:a=2,b=1,16,6.2 指针与数组,6.2.1 指针与一维数组6.2.2 指针与字符串,17,6.2.1 指针与一维数组,计算机中处理数组时,实际上是将ai转
6、换成*(a+下标表达式值)的形式。即 ai*(a+i)因为数组名可以表示该数组的首地址,所以:ai*(a+i)*(ptr+i)其中,ptr是指向a的指针。由此可见,用指针处理数组及元素是最快捷的方式,18,例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
7、0;,19,直接和间接使用变量,20,6.2.2 指针与字符串,指针-字符数组(字符串)例题分析设char*string;char string14;string=string1;有string10=*stringstring11=*(string+1),21,例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
8、?;coutstr 的长度是mystrlen(str)endl;return 0;,22,6.3 引用,6.3.1引用的概念6.3.2 函数的引用调用方式,23,6.3.1引用的概念,引用是一种特殊类型的变量,可以被认为是另一个变量的别名。引用运算符“,24,*和&,注意:*和,/说明符:声明ptr是一个int型指针/指针运算符:取指针ptr所指向地址内存储的数值/说明符:声明一个int型的引用ref/地址运算符:取变量x的地址,25,6.3.2 函数的引用调用方式,实参与形参有3种结合方式:值调用、传址调用和引用调用在形参名前加上引用说明符“&”即将其声明为引用,实参则直接采用一般的变量名。
9、在函数调用时,形参就成了实参的别名,对引用的操作就等同于直接对主调函数中原变量的操作。,26,#include using namespace std;void swap(int,交换两个整形变量的值(引用调用),运行结果:Before exchange:a=1,b=2After exchange:a=2,b=1,27,扩展阅读,6.4 动态存储分配6.5 自定义数据类型6.5.1 结构体类型6.5.2 枚举类型,28,6.4 动态存储分配,运算符new用来申请所需的内存指针=new 数据类型(初值);运算符delete用于释放先前申请到的存储块delete 指针;例:int*p=new in
10、t(5);delete p;为数组申请动态内存:指针=new 数据类型数组元素个数;释放数组占用的动态内存空间:delete 指针;例:int*p=new int size;delete p;,29,例 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;coutpit;delete p;/释放数组空间return 0;,30,6.5 自定义数据类型,6.5.1
11、结构体类型6.5.2 枚举类型,31,构造类型数据各元素是属于同一个类型的数组。不同类型的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是互相联系的。例如,学生信息:学号、姓名、性别、各科成绩,地址等这些项都与某一学生相联系。如下图所示:可以看到性别(sex)、年龄(age)、成绩(score)、地址(addr)都属于学号为20090531和名为“LeiFen”的学生。如果将num、name、sex、age、score、addr分别定义为互相独立的简单变量,难以反映它们之间的内在联系。,6.5.1 结构体类型,32,结构体作为一种数据构造类型,在程序中使用时要经历定义声明调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 程序设计 基础 精讲多练第章
链接地址:https://www.31ppt.com/p-6059614.html