文档详情

C++程序设计__第6章_指针.ppt

发布:2018-06-23约2.37万字共41页下载文档
文本预览下载声明
第六章 指针 本讲内容提要: 指针概念 指针的定义及使用 指针与数组 指针与函数 动态内存分配 复习:理解变量 6.1指针的概念 地址的概念 程序与数据都被存储在存储器的存储单元中,而存储单元都有自己的地址。 可以通过变量的名和地址来访问变量的值。 例如: int a; a=5; coutaaendl; 假设i变量在内存中所占存储单元的地址号为:1000 ,此时称1000为变量i的地址,而5为变量i的值,而i为变量名。 6.1指针的概念 指针的概念 什么是指针? 是一种特殊的数据类型(地址) 具有指针类型的变量称为指针变量,也简称为指针。 指针变量是用来存放其他变量的地址。 指针变量的类型由它所指向变量的类型决定。 6.2指针的定义及使用 指针变量的定义 和其他变量的定义类似,指针变量在使用前也必须定义其类型。 其定义的一般形式为: 类型标识符号 *指针变量名表 int a=5; int *p; p=a 说明: ‘*’仅表示该变量为指针变量,它不是变量名本身的一部分。 类型标识符是该指针变量所要指向的变量的类型。 在这里是取地址运算符。 与指针运算有关系的两个运算符 取地址运算符 求某一变量所占存储单元的存储地址。如: int i=50;int *ip;ip=i; i:求变量i 的存储单元的地址。此时,指针变量ip存放了变量i的存储地址,因此称指针变量ip此时是指向变量i的。 * 取值运算符 取出指针变量所指向的变量的内容,后面跟指针变量。 如:*ip为取出指针变量所指向的变量的内容。 即由于ip是指向变量i的,所以*ip与i是等价的。 注意:与指针变量的定义时使用的*不同。 例如: cout*ip; 指针变量的使用 指针变量的赋值 指针变量的初始化 直接地址赋值 例如: int m=0; int *p; p=m; 间接地址赋值 例如: int m=0; int *p,*q; p=m; q=p; 例6.2 问题:下面程序说明了指针变量改变过程。 使用指针变量的注意事项: 其使用方法和普通变量的使用原理一致,但要注意: 指针变量是一个变量。一个指针变量和普通变量一样,在内存中也占存储单元,因此一个指针变量也相当于一个容器,所以指针变量也有其指针,这就是指针变量的指针。 指针变量内只能存放其他变量的地址,而不能直接存放一个普通数据。 一个指针变量只能指向同一个类型的变量,如上例中指针变量ip只能总是指向整型变量。 一个指针变量只有先指向某一个变量后,才可利用该指针变量对它所指向的变量进行操作(间接访问)。 6.2.2 指针运算 对指针也可以进行一些运算: 赋值(=) 取地址() 取值(*) 比较 加、减运算 6.2.2 指针运算 1.比较运算 一定条件下,两个指针可以比较 指向同一类型数据的指针之间可以进行各种关系运算。两个指针之间的关系运算表示它们指向的变量在内存中的位置关系。可用于指针关系运算的运算符包括,,=,=,==,!= pq成立  说明p指向位置在q指向位置的前方 p==q成立 说明两个指针p,q指向内存中同一个位置。 p==0 或p==NULL 说明p是一个空指针,所指向数据操作失败.决不允许对空指针所指向的内存进行写操作。 6.2.2 指针运算 2.加减运输 一个指针可以加减一个整型数 在一定条件下,两个指针可以相减 指向同一个数组的不同元素的两个指针相减得到相隔元素个数。 例6.4 问题:分析下列程序的结果,分析指针加1与地址值加1的不同。 例6.3 问题:编写用于交换两个整型变量的值的函数。 验证swap()函数时的内存分配示意图 函数swap()运算结束时的内存分配示意图 使用指针进行更改后,程序清单如下: 函数swap()运算结束时的内存分配示意图 6.3指针与数组 指针与数组 数组的指针即整个数组在内存中的起始地址。 数组元素的指针是数组中某一元素所占存储单元的地址。 引用数组元素时是利用数组的下标进行的,也可以利用指针来进行。 利用指针引用某一数组元素时,即可以先使一指针变量指向某一数组元素,然后通过该指针变量对它所指向的数组元素进行操作。 6.3.1用指针访问数组 数组元素可以用下标表示,也可以用指针表示。 一维数组的指针表示 例6.5 问题:分析下列程序的输出结果,分析一维数组元素的指针表示。 6.3.1用指针访问数组 二维数组的指针表示 可以这样理解: 二维数组是一个一维数组,并且它的元素又是一个一维数组。 例如: int a[3][4]; 第1行的首地址:a+1 第1行第0列的元素地址: a[1] +0或 *(a+1)+0 第1行第1列的元素地址: a[1]+1 或 *(a+1)+1 第1行第1列的元素的值: *(a[1]+
显示全部
相似文档