第6讲动态内存分配和引用 教学目的与要求: 了解动态内存分配和引用的含义。 掌握new和 delete的使用及引用的使用。 教学内容提要 1、动态内存分配 2、引用; 3、课堂练习; 教学重点:new和 deletep使用和引用的使用 教学难点:new和 delete的使用和引用的使用。 教学进度:P35-P44 教学过程:
•教学目的与要求: 了解动态内存分配和引用的含义。 掌握new和delete的使用及引用的使用。 •教学内容提要: 1、动态内存分配 2、引用; 3、课堂练习; •教学重点:new和delete的使用和引用的使用。 •教学难点:new 和delete的使用和引用的使用。 •教学进度:P35-P44 •教学过程: 第 6 讲 动态内存分配和引用
61动态内存分配 动态内存分配是指在程序运行期间根据实际需要随时申请 内存,并在不需要时释放。 静态存储区二在程序运行开始前就分配的存储空间 按所占内存分类栈 局部变量在栈中分配存储空间。 堆也称为自由存储单元,动态内存分 配就是在堆中进行的。 在C艹+中进行动态内存分配时可使用运算符new和运算 符 delete,相应地我们把申请和释放内存的过程称作创建 L和删除 保持与C语言的兼容性,保留了C语言中在 alloc.h头 文件中用于动态内存分配的两个库函数:maoc0(与运算 符new功能类似)和re0(与运算符 delete功能类似)
动态内存分配是指在程序运行期间根据实际需要随时申请 内存,并在不需要时释放。 按所占内存分类 静态存储区 栈 在程序运行开始前就分配的存储空间。 局部变量在栈中分配存储空间。 堆 也称为自由存储单元,动态内存分 配就是在堆中进行的。 在C++中进行动态内存分配时可使用运算符new和运算 符delete,相应地我们把申请和释放内存的过程称作创建 和删除。 【6.1 动态内存分配】 保持与C语言的兼容性,保留了C语言中在alloc.h头 文件中用于动态内存分配的两个库函数:malloc()(与运算 符new功能类似)和free()(与运算符delete功能类似)。 注
(6.1.1 new 关键字new的作用是从堆中为程序分配指定数据类型所需 的内存单元。若分配成功,则返回其首地址;否则,返回 个空指针。new返回的内存地址必须赋给指针 使用格式: new类型名 //动态变量 new类型名(初值 new类型名[元素个数]/动态数组 功能: 生成一个(或一批)所给类型的无名动态变量,返回 所生成变量的一个指针值(首地址)
使用格式: new 类型名 //动态变量 new 类型名 ( 初值 ) new 类型名 [ 元素个数 ] //动态数组 功能: 生成一个(或一批)所给类型的无名动态变量,返回 所生成变量的一个指针值(首地址)。 关键字new的作用是从堆中为程序分配指定数据类型所需 的内存单元。若分配成功,则返回其首地址;否则,返回 一个空指针。new返回的内存地址必须赋给指针。 【 6.1.1 new】
例:int米pi,米pj,a=10; char米pC; p1= new int pi=a米a; pc =new char(A') pj= new int[101 (6.1.2 delete 使用格式: delete指针或 delete[]指针 功能:释放通过new生成的动态变量(或动态数组) 但指针变量仍存在
例:int *pi, *pj, a=10; char *pc; pi = new int; *pi = a*a; pc = new char('A'); pj = new int[10]; 使用格式: delete 指针 或 delete [ ] 指针 功能: 释放通过new生成的动态变量(或动态数组), 但指针变量仍存在。 【 6.1.2 delete】
例 int米pi,米pj p1= new int pj= new int[1o] delete pi //释放动态变量*pi,但指针变量pi仍存 在 delete [lpj
例: int *pi, *pj; pi = new int; pj = new int[10]; ... delete pi; //释放动态变量*pi, 但指针变量pi仍存 在 delete []pj;
例6.1操作符new和 delete的使用 #include void main( int米p; //声明一个整型指针变量p p= new int;//动态分配一个存放int型数据的内存 //空间,并将首地址赋给p p=10; cout<(*p; delete p /′释放指针变量p指向的内存空间
例6.1 操作符new和delete的使用。 #include void main() { int *p; // 声明一个整型指针变量p p=new int; // 动态分配一个存放int型数据的内存 // 空间,并将首地址赋给p *p=10; cout<<*p; delete p; // 释放指针变量p指向的内存空间 }
例6.2 从键盘输入10个int型数,而后按输入的相反 顺序输出它们。要求使用new运算符动态申请 数据空间存放数据。 使程序执行后的输入输出界面为 Input 10 integers 12345678910 The result 10987654321
从键盘输入10个int型数,而后按输入的相反 顺序输出它们。要求使用new运算符动态申请 数据空间存放数据。 使程序执行后的输入输出界面为: Input 10 integers: 1 2 3 4 5 6 7 8 9 10 ---- The result ---- 10 9 8 7 6 5 4 3 2 1 例 6.2
#include void maino i inti,*a,“p a= new int10; cout*(a+i);∥也可用a cout=a; p--) cout<<*p<< cout<<endl delete a
#include void main() { int i, *a, *p; a = new int[10]; cout>*(a+i); //也可用a[i] cout=a; p--) cout<<*p<<" "; cout<<endl; delete [ ]a; }
(6.2引用〗 621引用简介 简单的说,引用是某个变量或对象的别名。 建立引用时,必须用某个变量名或对象名来 对它进行初始化,从而将该引用绑定在那 个变量或对象上。 即是说,建立引用并不重新为其分配内 存空间,引用只是另一变量或对象的别名, 任何对引用的使用与改变都是对该引用所绑 定的那一变量或对象的使用与改变
6.2.1 引用简介 简单的说,引用是某个变量或对象的别名。 建立引用时,必须用某个变量名或对象名来 对它进行初始化,从而将该引用绑定在那一 个变量或对象上。 即是说,建立引用并不重新为其分配内 存空间,引用只是另一变量或对象的别名, 任何对引用的使用与改变都是对该引用所绑 定的那一变量或对象的使用与改变。 【6.2 引用 】
1.引用的建立 建立引用的格式如下: 类型&引用名=变量名或对象名 例如: int a=2. b int&refa=a;//引用refa是int型变量a的别名 int&refb=b;//引用reb是in型变量b的别名 refb=55 //b与refb的当前值都将是55 refa+=2;//a与refa都在原有值2的基础上增加 //了2,即当前值都变成了4
1. 引用的建立 建立引用的格式如下: 类型 & 引用名 = 变量名或对象名 例如: int a=2, b; int & refa=a; //引用refa是int型变量a的别名 int & refb=b; //引用refb是int型变量b的别名 refb=55 ; // b与refb的当前值都将是55 refa+=2; // a与refa都在原有值2的基础上增加 // 了2,即当前值都变成了4