欢迎来到天天文库
浏览记录
ID:59490538
大小:595.50 KB
页数:77页
时间:2020-09-13
《第7章指针与引用ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章指针与引用本章内容安排7.1创建和使用指针变量7.2栈和堆(new与delete动态内存分配)7.3堆中创建、访问与删除对象7.4创建和使用引用7.5数据成员中的指针与引用7.6复制构造函数中的深拷贝与浅拷贝7.7指针和引用的陷阱21、地址的概念地址:内存单元的编号就是该单元的地址,它表明了内存单元在内存中的相对位置变量保存在内存中,不同类型变量占用内存单元的数量不同变量的地址:变量占用的首个内存单元的地址2000…02…2002inta;如,变量a占用的是内存的2000~2003四个单元,变量a的地址为2000
2、。源代码中写a=5;我们可以理解为将5赋值给变量a;而计算机在执行程序时,只是将5送入2000~2003四个内存单元中3【例7_1】查看变量的地址#includeintmain(){shortsVar=5;longlVar=65535;floatfVar=3.14f;std::cout<<"Short:t"<3、Float:t"<4、会为指针变量分配内存单元。指针变量的类型:可保存其地址的变量数据类型。NULL为预定义常量,表示空指针,NULL通常等价于0。良好编程习惯:定义指针变量时应对其执行初始化,未初始化的指针称为野指针,非常危险。5为指针变量赋值通过&、=运算符,可以将某个变量的地址保存到指针变量中,称指针变量指向某个变量。inthowOld=50;int*pAge;pAge=&howOld;int*pAge2=&howOld;pAge=howOld;double*p=&howOld;指针变量中存储的地址值实际上是一个整数值,但不能将整数值5、直接赋值给指针变量。赋值时,取地址的变量类型必须与指针变量类型一致。否则编译器报错。X6指针变量inta=5;int*pa;pa=&a;指针变量pa指向变量a73、间接运算符*对指针变量执行间接运算*,又称为解除引用,将获得指针所指向地址处的值。unsignedshorthowOld=50;unsignedshortyourAge;yourAge=howOld;unsignedshorthowOld=50;unsignedshort*pAge=&howOld;unsignedshortyourAge;yourAge=*6、pAge;8【例7-2】使用指针操作数据#includeintmain(){intmyAge;int*pAge=&myAge;myAge=5;std::cout<<"MyAge:t"<7、nt*pAge;pAge=&a;int*p=&a;定义指针变量后,指针变量前的*表示解除引用,表示“存储在……处的值”*pAge=50;//将50保存到pAge所指处*(&a)a*可作为乘法运算符*pAge=yourAge*2;104、指针的用处实际编程时,很少直接定义指针变量指向某个变量,然后通过指针间接访问该变量。指针的实际应用传递函数参数,实现对实参的间接修改。访问类中成员数据和成员函数;管理堆中的数据(动态内存管理);11【例7-3】用指针交换两个整数“函数”章中有swap函数,不成功的交换原因:参数是变量8、的值=》单向的传递办法:参数是变量的地址=》访问的是同一内存空间voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;std::cout<<*x<<","<<*y<voidswap(int*a,int*b);intmain
3、Float:t"<4、会为指针变量分配内存单元。指针变量的类型:可保存其地址的变量数据类型。NULL为预定义常量,表示空指针,NULL通常等价于0。良好编程习惯:定义指针变量时应对其执行初始化,未初始化的指针称为野指针,非常危险。5为指针变量赋值通过&、=运算符,可以将某个变量的地址保存到指针变量中,称指针变量指向某个变量。inthowOld=50;int*pAge;pAge=&howOld;int*pAge2=&howOld;pAge=howOld;double*p=&howOld;指针变量中存储的地址值实际上是一个整数值,但不能将整数值5、直接赋值给指针变量。赋值时,取地址的变量类型必须与指针变量类型一致。否则编译器报错。X6指针变量inta=5;int*pa;pa=&a;指针变量pa指向变量a73、间接运算符*对指针变量执行间接运算*,又称为解除引用,将获得指针所指向地址处的值。unsignedshorthowOld=50;unsignedshortyourAge;yourAge=howOld;unsignedshorthowOld=50;unsignedshort*pAge=&howOld;unsignedshortyourAge;yourAge=*6、pAge;8【例7-2】使用指针操作数据#includeintmain(){intmyAge;int*pAge=&myAge;myAge=5;std::cout<<"MyAge:t"<7、nt*pAge;pAge=&a;int*p=&a;定义指针变量后,指针变量前的*表示解除引用,表示“存储在……处的值”*pAge=50;//将50保存到pAge所指处*(&a)a*可作为乘法运算符*pAge=yourAge*2;104、指针的用处实际编程时,很少直接定义指针变量指向某个变量,然后通过指针间接访问该变量。指针的实际应用传递函数参数,实现对实参的间接修改。访问类中成员数据和成员函数;管理堆中的数据(动态内存管理);11【例7-3】用指针交换两个整数“函数”章中有swap函数,不成功的交换原因:参数是变量8、的值=》单向的传递办法:参数是变量的地址=》访问的是同一内存空间voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;std::cout<<*x<<","<<*y<voidswap(int*a,int*b);intmain
4、会为指针变量分配内存单元。指针变量的类型:可保存其地址的变量数据类型。NULL为预定义常量,表示空指针,NULL通常等价于0。良好编程习惯:定义指针变量时应对其执行初始化,未初始化的指针称为野指针,非常危险。5为指针变量赋值通过&、=运算符,可以将某个变量的地址保存到指针变量中,称指针变量指向某个变量。inthowOld=50;int*pAge;pAge=&howOld;int*pAge2=&howOld;pAge=howOld;double*p=&howOld;指针变量中存储的地址值实际上是一个整数值,但不能将整数值
5、直接赋值给指针变量。赋值时,取地址的变量类型必须与指针变量类型一致。否则编译器报错。X6指针变量inta=5;int*pa;pa=&a;指针变量pa指向变量a73、间接运算符*对指针变量执行间接运算*,又称为解除引用,将获得指针所指向地址处的值。unsignedshorthowOld=50;unsignedshortyourAge;yourAge=howOld;unsignedshorthowOld=50;unsignedshort*pAge=&howOld;unsignedshortyourAge;yourAge=*
6、pAge;8【例7-2】使用指针操作数据#includeintmain(){intmyAge;int*pAge=&myAge;myAge=5;std::cout<<"MyAge:t"<7、nt*pAge;pAge=&a;int*p=&a;定义指针变量后,指针变量前的*表示解除引用,表示“存储在……处的值”*pAge=50;//将50保存到pAge所指处*(&a)a*可作为乘法运算符*pAge=yourAge*2;104、指针的用处实际编程时,很少直接定义指针变量指向某个变量,然后通过指针间接访问该变量。指针的实际应用传递函数参数,实现对实参的间接修改。访问类中成员数据和成员函数;管理堆中的数据(动态内存管理);11【例7-3】用指针交换两个整数“函数”章中有swap函数,不成功的交换原因:参数是变量8、的值=》单向的传递办法:参数是变量的地址=》访问的是同一内存空间voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;std::cout<<*x<<","<<*y<voidswap(int*a,int*b);intmain
7、nt*pAge;pAge=&a;int*p=&a;定义指针变量后,指针变量前的*表示解除引用,表示“存储在……处的值”*pAge=50;//将50保存到pAge所指处*(&a)a*可作为乘法运算符*pAge=yourAge*2;104、指针的用处实际编程时,很少直接定义指针变量指向某个变量,然后通过指针间接访问该变量。指针的实际应用传递函数参数,实现对实参的间接修改。访问类中成员数据和成员函数;管理堆中的数据(动态内存管理);11【例7-3】用指针交换两个整数“函数”章中有swap函数,不成功的交换原因:参数是变量
8、的值=》单向的传递办法:参数是变量的地址=》访问的是同一内存空间voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;std::cout<<*x<<","<<*y<voidswap(int*a,int*b);intmain
此文档下载收益归作者所有