- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 指针与引用 田秀霞 上海电力学院计信学院 本章主要内容 §6.1 指针及指针变量 §6.2 数组与指针 §6.3 函数与指针 §6.4 指针运算 §6.5 指针数据类型小结 §6.6 动态分配和撤销内存运算符new和delete §6.1 指针及指针变量 程序是通过变量名对数据进行存取操作的。 实际上在程序经过编译之后,变量名被转换为内存地址。 对变量值的存取操作都是通过地址进行的。 变量与地址 地址:一个变量名代表内存中的一个存储单元,每个存储单元都有一个编号,这就是“地址”。 内存的组织形式: 由一个个存储单元组成 每个存储单元是一个字节 每个字节对应一个编号 编号就是地址 变量与地址的关系 int i=6; char ch=‘a’; float f=3.14; 指针变量的初始化 定义了指针变量之后,若要使用它,必须为其先赋值。 可以在定义的同时为其初始化: 基类型 *指针变量名=地址值; 如:int a; int *p=a; 以下赋值方式是不合法的: int *p=2000; 可以在定义之后、使用之前,给指针变量初始化 : int a,*p; //定义时未初始化指针变量 p=a; int *p=NULL; //定义时初始化指针为NULL。 表示p指向地址为0的单元,值为0的指针为空指针。 空指针不指向任何变量,不指向任何有效单元。 在不确定指针初值的情况下,为了安全起见,通常会把指针初始化为0。 §6.1.3 指针运算 指针运算就是地址的运算,主要是: 算术运算 关系运算 赋值运算 算术运算 如:p+=n,p-=n 指针指向当前位置向后或向前的第n个数据的位置 p++,p-- 指针指向下一个或上一个数据的位置 指针算术运算的结果取决于指针指向的数据类型。 p±n运算得到的地址是:p±n*sizeof(数据类型) 指针的关系运算 指针的关系运算用于判断指针指向的位置之间的关系,只有当两个指针指向同一串连续的存储单元时才有意义。 表示 p1p2 指针的赋值运算 定义一个指针后,必须先给它赋值后才能引用。 将一个变量的地址赋给指针变量。 int a,*p; p=a; 将数组元素的地址赋给指针变量。 int b[10],*p,*q; p=b; //将数组b的首地址赋值给p q=b[3]; 将一个指针变量的值赋给另一个指针变量。 int c,*p=c,*q; q=p; §6.1.4 动态分配内存 静态与动态内存分配的两个主要区别是: 静态对象是有名字的变量,可以直接对其进行操作。 动态对象是没有名字的变量,可以通过指针间接地对它进行操作。 静态对象的分配与释放由编译器自动处理。 动态对象的分配与释放,必须由程序员显示地管理,主要通过new和delete两个表达式完成。 动态申请内存操作符new new 类型名T(初值列表) T *变量名=new T[(初值)]; 功能 在程序执行期间,可以动态申请用于存放T类型对象的内存空间,并用初值列表对内存空间赋初值。 返回结果 申请内存空间成功:返回T类型的指针,指向新分配的内存空间。 申请内存空间失败:返回0(NULL) new表达式的两种方法 用于分配特定类型的单个对象 例如: int *pint = new int(1024); ?表达式返回申请的整型对象在内存中的地址。并用这个地址来初始化指针对象pint。 用于分配特定类型和一定大小的数组 例如:int *pia=new int[4]; 申请了一个由四个整型元素构成的数组,并将数组的首地址赋值给指针变量pia。 释放内存操作符delete 当不再使用动态分配的对象或对象数组时,必须显式地释放这些内存。 通过使用delete表达式的两个方法之一来完成。 delete表达式的两种方法 例如:删除单一对象? delete pint; 数组形式的delete表达式为: delete [] pia; 如果忘记删除动态分配的内存空间,程序就会在结束时出现内存泄漏的问题。 §6.2 数组与指针 指针变量可以指向变量,那它同样也可以指向数组元素; 数组元素的指针就是数组元素的地址。 一维数组与指针 访问一个数组元素有两种方法,即下标法和指针法; 下标法 数组名和下标可以唯一的确定一个数组元素,并通过下标的变化,实现对数组中所有元素的操作。 指针法 定义一个指针变量指向数组元素的一般方法如下: int a[5]; //定义一个含有5个元素的整型数组a int *p; //定义指向整型变量的指针p p=a[0]; //将数组中第一个元素的地址赋值给p 由于数组名表示数组的首地址,可将以上语句改写为 int a[5]; int *p
您可能关注的文档
- 德国公司23个经典面试问题的应答与技巧.docx
- 德鲁克管理理论(67).ppt
- 德意电子商务实验室软件V20.doc
- 德语动机信的写法Motivationsschreiben Muster (一).docx
- 德语简历模板(二) Lebenslauf2.doc
- 德育剧剧本(姣).doc
- 德育论文孩子我想请你唱一首歌(任玺铮)45.doc
- 等离子MPDP与液晶MLCD的对比.ppt
- 等腰三角形、直角三角形.doc
- 地方标准《泡椒凤爪(翅)》.doc
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)