
第 8 章 指针
1 第 8 章 指针

主要内容·动态分配内存一动态数组
2 • 动态分配内存—动态数组 主要内容

>动态分配内存>指针的高级使用Page3
Page 3 ➢动态分配内存 ➢指针的高级使用

动态分配内存对于程序中一般声明的变量,其所占内存空间不需要程序员管理,编译器在编译阶段就自动将管理这些空间的代码加入到目标文件中。程序运行后由系统自动为变量分配内存空间,在作用域结束后释放内存空间。有时程序只能在运行时才能确定需要多少内存空间来存储数据,这时程序员就需要采用动态内存分配的方法设计程序。动态内存分配是指在程序运行时为程序中的变量分配内存空间,它完全由应用程序自已进行内存的分配和释放。动态内存分配是在一些被称为堆的内存块中为变量分配内存空间。Page
Page 4 对于程序中一般声明的变量,其所占内存空间不需 要程序员管理,编译器在编译阶段就自动将管理这些空 间的代码加入到目标文件中。程序运行后由系统自动为 变量分配内存空间,在作用域结束后释放内存空间。 有时程序只能在运行时才能确定需要多少内存空间 来存储数据,这时程序员就需要采用动态内存分配的方 法设计程序。动态内存分配是指在程序运行时为程序中 的变量分配内存空间,它完全由应用程序自己进行内存 的分配和释放。动态内存分配是在一些被称为堆的内存 块中为变量分配内存空间。 动态分配内存

指针变量对这种的描述在C语言中是指针出现的主要原因和意义。当预先不能确定数组的容量(或者长度)时,需要在程序中动态分配内存。在C++中推荐使用new和delete算法动态分配内存或者释放内存=new[size] ;delete[];在C语言中动态内存分配是通过调用标准库函数malloc()和free()实现的。Page
Page 5 指针变量 对这种 的描述在C 语言中是指针出现的主要原因和意义。 当预先不能确定数组的容量(或者长度)时,需要在程序 中动态分配内存。在C++中推荐使用new和delete算法动态分 配内存或者释放内存 =new [size]; delete[] ; 在C语言中动态内存分配是通过调用标准库函数 malloc()和free()实现的

动态分配内存运算符new的使用形式p = new [size] ;type是数据类型,表示要为哪种数据类型的变量分配空间;size表示要为多少个变量分配空间,可以省略size(缺省值为1);p是一个type类型的指针变量,指向所分配的存储单元例Page
Page 6 运算符new的使用形式: p = new [size] ; type是数据类型,表示要为哪种数据类型的变 量分配空间;size表示要为多少个变量分配空间, 可以省略size(缺省值为1);p是一个type类型的指针 变量,指向所分配的存储单元。 例 动态分配内存

使用new运算符的例子为一个整型变量(其指针为pNum)分配内存空间int*pNum=new int;为一个单精度变量(其指针为px)分配内存空间:float* px=new float;为一个字符串分配内存空间:char*pBuffer=newchar[256]为一个整型数组(动态数组)分配内存空间:int* pa=new int[100];分配内存的同时进行初始化:/ / 区别:p=new int[555]p=new int(555);Page
Page 7 使用new运算符的例子 ⚫ 为一个整型变量(其指针为pNum)分配内存空间: int* pNum=new int; ⚫ 为一个单精度变量(其指针为px)分配内存空间: float* px=new float; ⚫ 为一个字符串分配内存空间: char* pBuffer=new char[256]; ⚫ 为一个整型数组(动态数组)分配内存空间: int* pa=new int[100]; ⚫ 分配内存的同时进行初始化: p=new int(555); // 区别:p = new int[555]

内存空间的释放运算符delete用于释放new运算符所分配的内存空间,其一般使用形式为:delete p;如果要释放一个动态数组所占用的内存空间采用如下形式:delete[]pa;使用举例Page
Page 8 内存空间的释放 ⚫ 运算符delete用于释放new运算符所分配的内存 空间,其一般使用形式为: delete p ; ⚫ 如果要释放一个动态数组所占用的内存空间, 采用如下形式: delete [ ] pa ; 使用举例

例new和delete的使用。#include voidmain()int* pi;动态分配内存pi = new int;*pi= 555;cout<<*pi<<endl;/释放new所分配的内存delete pi;1Page
Page 9 例 new和delete的使用。 #include void main() { int* pi; pi = new int; // 动态分配内存 *pi = 555; cout<<*pi<<endl; delete pi; // 释放new所分配的内存 }

标准C动态分配内存在标准C中一般用calloc(和malloc(两种函数动态分配内存;内存使用完毕后用free(释放内存voidcalloc(size t num, size t sizel);void* malloc(size t size2) ;void free(void* ptr);使用时需要#includenum:元素个数sizel:每个元素占用的字节数size2:需要分配的总字节数返回类型为void*,即通配指针类型,需要进行显式类型转换后才能赋值给其它类型的指针freeO函数用于释放动态分配的内存Page10
Page 10 在标准C中一般用calloc()和malloc()两种函数动 态分配内存;内存使用完毕后用free()释放内存 void* calloc(size_t num, size_t size1); void* malloc(size_t size2); void free(void* ptr); 使用时需要 #include ⚫ num: 元素个数 ⚫ size1: 每个元素占用的字节数 ⚫ size2: 需要分配的总字节数 ⚫ 返回类型为void*,即通配指针类型,需要进行显式类型转换后才能赋 值给其它类型的指针 ⚫ free() 函数用于释放动态分配的内存 标准C动态分配内存