Visual C++程序设计 王永国 第4章新.ppt
文本预览下载声明
第4章 数组、指针与字符串 4.2.2 数组元素的引用和基本操作 4.2.3 数组排序 4.3 二维数组 4.3.2 二维数组的基本操作 4.4 字符数组 4.5 指针和数组 4.5.5 指针和字符串 4.6.2 链表 2. 线性链表 建立一个简单的链表 3. 线性链表生成与遍历 4.7 常用算法 2.定义及初始化 定义: 例如: int *p; float *q; 初始化: 在定义的同时赋初值,称为指针变量的初始化。 例如:float d =1.5, *p= d; 可改写为:float d =1.5, *p; p = d; //注意不能写做*p=d 数据类型 *标识符; 指针所指对象的类型 不是指针名的一部分 d 1.5 p d 假定有定义:int *p, a; p=NULL; 指针的值为NULL(0) 表示不指向任何对象。 p=a; p指向变量a。 p1=a; p2=p1; 相同类型的指针变量可以相互赋值。 例,假设有定义: int a,*p; float f; 则以下形式不允许:(?) p=f; (?) p=100; 3.运算 赋值运算 算术运算 p+n (或p-n): p+n:指向后面的第n个元素。 p-n:指向前面的第n个元素。 p+n的值为:p的值+n*sizeof(p指向的类型) 如,有定义: int a,*p=a; 假设a的地址为1000,则: p的值为:1000 p+3的值为:1000+3*sizeof(int)=1000+3*4=1012 *p++ ≌ *(p++) ≌ *p p++ (*p)++ ≌ *p (*p)++ 自增(++)和自减(--) p++、 ++p、 p--、 --p 自增或自减后p指向前一个或后一个元素 指针相减 两个类型相同的指针可以相减,结果为这两个地址差之间能够存放的数据个数(数据类型为指针所指的类型)。 如,有定义:int *p1, *p2; 假设p1指向1000,p2指向1008,则p2-p1的值为: (1008-1000)/sizeof(int)=2 1. new运算符 用于向系统申请动态存储空间,并把首地址作为运算结果。形式为: 指针=new 数据类型; 指针=new 数据类型(初值); 或 2. delete运算符 用于释放用new申请的动态存储空间,形式为: delete 指针; delete []指针; 或 无需指明数组长度 只能释放由new 申请的动态变量 4.5.2 动态存储空间 例: int a=3,*p=a,*q; q=new int(6); delete p; (?) delete q; 【例2-3 】指针运算示例 #include iostream.h void main() {int *p=new int; *p=3; cout*pendl; coutpendl; delete p; cout*pendl; } 数组的地址是制是指数组存放的起始地址,以数组名表示。 设有定义: int a[6]={10,20,30,40,50,60},*p=a; 下面介绍引用数组元素的三种方式。 1.下标方式 形式: 数组名[下标] 2. 地址方式 形式: *(地址) 3. 指针方式 形式: *指针变量名 假设有定义: float a[10], *p = a; 则如下的等价关系成立: (1) p ≌ a ≌ a[0] (2) p+i ≌ a+i ≌ a[i] (3) *(p+i) ≌ *(a+i) ≌ a[i] 指针可以作数组名用 即:p[i] ≌ a[i] 4.5.3 指针和一维数组 设有:int a[10],*p; 则: p = a; for(i = 0; i10; i++) cin a[i]; 等价于: p = a; for (i=0; i10; i++) cin*p++; p = a; for (i = 0; i10; i++,p++) cin*p; p = a; for (i = 0; i10; i++) cin*(p+
显示全部