指针和引用 课件.pdf
第四章指针和引用
4.1指针
4.2引用
第四章指针和引用
4.1.1指针的定义
4.1.2指针的应用
4.1.3堆内存分配
4.1.4指针与数组
4.1指针
1、指针类型
指针类型是它所指向的类型,而不是指针本
身数据值的类型,因为任何指针变量本身的数据
值类型都是无符号长整型。由于指针的类型是由
它所指向的变量类型而定,所以指针所指向的变
量类型不同,指针的类型也不同。
4.1.1指针的定义
2、指针变量的定义
定义为指针类型的变量称为指针变量,指针变量定义和定
义一般变量一样,也需要3个基本要素:变量名、变量类型和
变量值。先要指出指针类型,确定指针变量的名字,并在指针
变量名前加“*”,以表示后面的名字为指针变量名。具体格
式
为:
指针类型说明符*指针变量名1,*指针变量名2,……;
指针变量名和一般变量是一样的要求——只要符合合法的
标识符即可,但是在变量类型和变量值上有所不同。其特殊性
就在于该类型变量是用来保存地址值的。
3、指针变量的初始化
指针变量与一般变量一样,在定义时可以对
其初始化,也可以不赋初值,等需要的时候再赋
值,只是所赋的初值均为地址值。不同类型的变
量的地址值表示方法有所不同。在C++语言中给
指针变量初始化是取一般变量、数组元素、结构
成员等的地址给指针变量赋值,取地址的运算符
为“”。
4、指针变量所指向的变量
例如,inta=6;
int*pa=a;//定义指针变量pa,并将变量a的地址值赋给pa
解释:第一条语句定义了一个int型变量a,并给它赋了初值,
于是变量a就有了两个值:一个是该变量存储的数据值
6;另一个是变量a在内存中分配的地址值,它被表示为
a。第二条语句定义了一个指针变量pa,它的基类型
是int型的,它也被赋了初值,即变量a的地址值a,于
是指针变量pa便指向了变量a。
一般来说,指针允许的运算如下:
•加赋值、减赋值和赋值运算
对指针变量可以赋初值,也可以通过赋值语句给其赋值。
例如,inta,*pa=a;
•加、减、自加、自减和比较运算
指针可以进行加、减、自加、自减和比较运算,但是需要
在一定的条件下,才可以进行。例如,指向同一个数组的两个
不同指针可以相减,也可以相比较,这样的运算是有意义的。
•间接访问运算与取地址运算
指针运算实际上是地址运算,但是指针运算又不同于地址
运算。
4.1.2指针的应用
1、堆内存
堆是内存空间。堆是区别栈区、全局数据区和代码区的另
一个内存区域。堆允许程序在运行时而不是编译时,申请某个
大小的内存空间。
2、获得堆内存
函数malloc()是C程序获得堆内存的一种方法,它在alloc.h
头文件中声明。malloc()函数原型为:
void*malloc(unsignedlongsize);
3、释放堆内存
函数free()返还由malloc()函数分配的堆内存,其函数原型
为:voidfree(void*);
4.1.3堆内存分配
4、new和delete
new和delete是C++专有的操作符,他们不用头文件声明。
new类似于函数malloc()分配堆内存,但比malloc()更简练。
new的操作数为数据类型,它可以带初始化值表或单元个数。
new返回一个具有操作数之数据类型的指针。
返回delete类似于函数free(),释放堆内存。delete的操作
数是new返回的指针,当返回的是new分配的数组时,应该带
[]。
5、const指针
指向常量的指针(常量指针),常量指针就是指指向常
量的指针,在指针定义语句的类型前加const,表示指向的对
象是常量。
•指针常量
指针常量就是指指针本身是常量。在指针定义语
句的指针名前加const,表示指针本身是常量。
•指向常量的指针常量
可以定义一个指向常量的指