网站大量收购闲置独家精品文档,联系QQ:2885784924

C++面向对象第九章.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C面向对象第九章

C++面向对象程序设计 第九章 指针与动态数组 葛勇 概览 指针 指针变量 基本内存管理 虚悬指针 静态变量和动态变量 编程提示:定义指针类型 动态数组 数组变量和指针变量 创建和使用动态数组 指针运算 多维动态数组(可选) 9.1指针 指针(pointer)是变量的内存地址。指针变量是用来操作计算机内存地址的。 在C++中有时会将内存地址作为变量的名称来使用,如以前用过的函数引用形参,在调用该函数时,就是将对应于该形参的实参地址传给这个形参,从而以形参的操作实际上是在实参所在的内存地址上进行操作的。 相对于函数的引用形参来讲,C++中还有更重要的操作内存地址的方式,就是使用指针。 指针的声明 声明一个指针变量的方法可如下进行: double* p; 上面的*位置可以靠近类型double,也可以靠近变量p,也可以都不靠近,如下的声明都是合法的。 double *p; double * p; 上述声明均声明了一个指针变量p,它只能用来指向一个double类型的变量,而不以指 指针变量的赋值 向其它类型的变量,如: double a=10.1; p=a; //在这里是取地址操作符 是合法的,表示变量p指向变量a的地址。但: int b=5; p=b; 则是非法的。 指针变量可以和普通变量在一行进行声明,如: int* p1, *p2, v1,v2; 则声明了两个int型指针变量p1,p2,以及两个int型变量v1,v2,注意这里v1,v2不是指针变量。为了避免造成误解,请把*号靠近变量名,改成如下声明方式: int *p1, *p2, v1,v2; //提倡使用 指针的提领操作 为了读取一个指针变量指向的地址上所存储的值,可使用*操作进行提领,如: int a=10; int* p=a; int b=*p; 最后一行的语句则将p所指向的地址,即a的地址上的值,也即是变量a的值10赋值给变量b。 再如: int a=10; int *p=a; *p=3; 则将p所指向的地址的值修改为3,那么如果有 couta; 则此时a的值为3,也就是说p指向的地址值一旦改变了,a的值也相应的改了,实际上, 指针p操作的就是a的地址。 值得注意的是:使用地址赋值与使用*提领符进行赋值是有区别的,如对: int *p1,*p2; p1=p2; 和 *p1=*p2; 有什么区别? p1=p2与*p1=*p2的区别 #includeiostream using namespace std; int main() { int *p1,*p2; int a=3,b=5; p1=a; p2=b; cout现在a=a,b=b ,p1指向a,p2指向b.\n; p1=p2; cout经过p1=p2后\n; cout*p1=*p1\t p1=p2与*p1=*p2的区别 *p2=*p2\t a=a\t b=bendl; cout再重新让p1指向a,p2指向b.\n; p1=a; p2=b; *p1=*p2; cout经过p1=p2后\n; cout*p1=*p1\t *p2=*p2\t a=a\t b=bendl; } 比较结果 一个指针声明后如果不进行赋值操作(称为指针的初始化),则该指针不指向任何对象,提领操作,如*p是非法,即对内存进行非法操作,如下程序: 未初始化的指针 #includeiostream using namespace std; int main() { int *p1; cout*p1endl; } 未初始化的指针 一个指针可以指向一个无名变量,如: double *dp; dp=new double; 上一语句中的new操作符的作用是分配一块容纳double类型值的内存,在32位机器上也就是分配8Bytes大小的内存以存储一个double类型的值,而new double则返回这块的内存地址值,从而对dp进行初始化。 也就是p指向这块新分配的内存地址,但这块内存地址没有变量来表示,从而可视为无名变量。 对这块地址的操作,如赋值,可通过指向它的指针来进行,如: *dp=5.5; 指针的类型可以是任意已经定义的变量类型,如: string *sp; vector *vp; struct words { char zimu; int num; }; words *wp, wd; wd.zimu=‘a’; wd.num=3; wp=wd; (*wp).zimu=‘b’; (*wp).num=2; 都是合法的。注意(*wp).zimu与*wp.zimu有什么不同?为什么? new操作符 new操作分配内存的方式还有许多好的特性: int *n; n=new int(17);

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档