面向对象程序设计语言C-课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《面向对象程序设计语言C-课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计语言 课件
- 资源描述:
-
1、第五章第五章 构造数据类型构造数据类型丘志杰丘志杰电子科技大学电子科技大学计算机学院计算机学院 软件学院软件学院枚举类型枚举类型 “枚举枚举”是指将变量所有可能的取值是指将变量所有可能的取值一一一一列举列举出来,变量的取值只限于列举出来的常出来,变量的取值只限于列举出来的常量。枚举类型的声明的一般形式如下量。枚举类型的声明的一般形式如下:当当没给各枚举常量指定值时没给各枚举常量指定值时,其值依次默认,其值依次默认为为0、1、2、;在定义枚举类型时,也可;在定义枚举类型时,也可使用赋值号另行指定枚举常量的值。使用赋值号另行指定枚举常量的值。enumenum 枚举类型名枚举类型名 枚举常量枚举常量
2、1,1,枚举常量枚举常量2,2,枚举常量枚举常量nn;枚举!枚举!例:例:Need To Do举例举例 数组数组 数组是一组在内存中数组是一组在内存中依次连续存依次连续存放放的、具有的、具有同一类型同一类型的数据变量的数据变量所组成的集合体。所组成的集合体。数组元素用数组名与带方括号的数组元素用数组名与带方括号的数组数组下标下标一起标识。一起标识。一维数组定义与使用一维数组定义与使用 一维数组定义的一般形式为:一维数组定义的一般形式为:数据类型数据类型 数组名数组名常量表达式常量表达式;说明:说明:数组元素的类型可以是数组元素的类型可以是voidvoid型以型以外的任何数据类型。外的任何数据类
3、型。数组名代表数组元素在内存中的起数组名代表数组元素在内存中的起始地址,是一个地址常量。始地址,是一个地址常量。数组定义之后,系统会将从内存中数组定义之后,系统会将从内存中为其分配为其分配一块连续的存储空间一块连续的存储空间,从第,从第1 1个数据元素开始个数据元素开始依次存放依次存放各个数组元素。各个数组元素。例如:例如:intint a5;a5;假设地址 内容 符号地址 103410A0 103410A4 103410A8 103410AC 103410B0 a a+1 a+2 a+3 a+4 5*sizeof(int)a0 a1 a2 a3 a4 一维数组的初始化一维数组的初始化 一维数
4、组初始化的语法形式为:一维数组初始化的语法形式为:数据类型数据类型 数组名数组名 常量表达式常量表达式=初初值值1,初值初值2,初值初值n;例如:例如:int array3=5,6,7;int array23=1,2;存取一维数组元素的语法形式为:存取一维数组元素的语法形式为:数组名数组名 下标表达式下标表达式;读数组元素的地址读数组元素的地址通过数组名通过数组名来读来读取,格式如下:取,格式如下:数组名数组名+整型表达式整型表达式;或&数组名数组名下标表达式下标表达式;使用数组要注意的地方使用数组要注意的地方F在使用数组时最常犯的错误是在使用数组时最常犯的错误是下标越界下标越界。F数组名是一
5、个地址常量,不能作为数组名是一个地址常量,不能作为左值左值(赋值的目标赋值的目标)。因此,不能将一个数组整体。因此,不能将一个数组整体拷贝给另外一个数组。拷贝给另外一个数组。例如:例如:intint a5,c5,i;a5,c5,i;a=c;a=c;/错误错误!正确的方法是将对应的元素进行拷贝:正确的方法是将对应的元素进行拷贝:for(ifor(i=0;i5;i+)=0;i5;i+)aiai=cici;字符数组与字符串字符数组与字符串 存放字符型数据的数组称为存放字符型数据的数组称为字符数组字符数组。1.1.用字符进行初始化用字符进行初始化 例如:例如:char s1=C,h,i,n,a;2.用
6、字符串进行初始化用字符串进行初始化 例如:例如:char s2=China;字符数组的使用字符数组的使用 字符数组也是数组,我们同样可以字符数组也是数组,我们同样可以通过数组名及下标引用数组中的元通过数组名及下标引用数组中的元素。为方便对字符与字符串的处理,素。为方便对字符与字符串的处理,C+C+提供了许多专门处理字符与字提供了许多专门处理字符与字符串的函数。符串的函数。参看参看P118表表5-1。指针指针指针是指针是C+C+语言最重要特性之一,语言最重要特性之一,也是也是C+C+的主要难点。的主要难点。指针提供了一种较为直观的指针提供了一种较为直观的地址地址操操作的手段,正确地使用指针,可以
7、作的手段,正确地使用指针,可以方便、灵活而有效地组织和表示复方便、灵活而有效地组织和表示复杂的数据。杂的数据。地址与指针地址与指针 地址:当定义一个变量后,内存中将会划地址:当定义一个变量后,内存中将会划出一块由若干个存储单元组成的区域,用于出一块由若干个存储单元组成的区域,用于保存该变量的数据。在保存该变量的数据。在内存里每个存储单元内存里每个存储单元都有各自的编号都有各自的编号,称为地址。,称为地址。指针:在指针:在C+C+中,提供了指针类型,它是一中,提供了指针类型,它是一种种用于存放内存单元地址的变量类型用于存放内存单元地址的变量类型,地址,地址就存储在这种指针类型的变量中。正因为就存
8、储在这种指针类型的变量中。正因为指指针变量存储的是地址针变量存储的是地址,用它来指明内存单元,用它来指明内存单元,所以形象地称这种地址变量为指针。所以形象地称这种地址变量为指针。指针变量的定义指针变量的定义例如:例如:int*ip;/定义了一个定义了一个int型的指针变量型的指针变量ip float*fp;/定义了一个定义了一个float型指针变量型指针变量fp typedef int A10;A*ap;/定义了一个定义了一个A类型的指针变量类型的指针变量ap sizeof(ip)=sizeof(fp)=sizeof(ap)=4;数据类型数据类型 *变量名;变量名;指针的初始化与赋值指针的初始
9、化与赋值(1)不要将一个非地址常量、变量以及无意义的实)不要将一个非地址常量、变量以及无意义的实际地址赋给指针变量。如:际地址赋给指针变量。如:int*p=100;/int*p=(int*)100;(对吗?)(对吗?)int*p=(char*)100;(2)可以使用一个已初始化的指针去给另一个指针)可以使用一个已初始化的指针去给另一个指针赋值,但类型必须一致如果不一致,可进行强制赋值,但类型必须一致如果不一致,可进行强制类型转换。类型转换。char*p=NULL;int*ip=(int*)p+100;数据类型数据类型 *指针变量名指针变量名=初始地址表达式;初始地址表达式;(3)对于基本数据类
10、型的变量、数组元素我们可以)对于基本数据类型的变量、数组元素我们可以使用取地址运算符使用取地址运算符&来获得它们的地址,但是也只来获得它们的地址,但是也只有类型一致才能赋值。有类型一致才能赋值。int a10;/定义定义int型数组型数组 int *i_pointer=a;/定义并初始化定义并初始化int型指针型指针(4)有一种特殊的)有一种特殊的void类型指针,可以存储任何的类型指针,可以存储任何的类型地址;但将一个类型地址;但将一个void类型的地址赋值给非类型的地址赋值给非void类型的指针变量,要使用类型强制转换。类型的指针变量,要使用类型强制转换。void v;/错误,不能定义错误
11、,不能定义void类型的变量类型的变量 void*vp;/定义定义void类型的指针类型的指针指针运算指针运算 指针通常进行下列几种运算:赋值运算、取指针通常进行下列几种运算:赋值运算、取值运算、算术运算、相减运算、比较运算。值运算、算术运算、相减运算、比较运算。(1 1)*和和&运算运算 *:指针运算符,:指针运算符,&:取地址运算符。:取地址运算符。例如:例如:int a4=1,2,3;int*ip=&a2;cout*ip;*ip=100;0013A000 a0=1 0013A004 a1=2 *ip 0013A008 a2=3 0013A00C a3=0 ip 0013A014 ip=0
12、013A008 (2)指针与整数的加减运算)指针与整数的加减运算 指针的指针的加减运算加减运算与普通变量的加减与普通变量的加减运算不同,由于指针存储的是变量的运算不同,由于指针存储的是变量的内存地址,指针加上或减去一个整数内存地址,指针加上或减去一个整数n n,表示指针从当前位置向后或向前,表示指针从当前位置向后或向前移动移动n n个个sizeof(数据类型)(数据类型)长度的存长度的存储单元。因此对于不同的数据类型,储单元。因此对于不同的数据类型,n n的实际大小就不同。的实际大小就不同。(3 3)指针自增、自减运算)指针自增、自减运算 指针的自增、自减运算是指针加减运算的特指针的自增、自减
13、运算是指针加减运算的特例。指针的自增或自减表示指针从当前位置例。指针的自增或自减表示指针从当前位置向后或向前移动向后或向前移动sizeof(数据类型)长度的(数据类型)长度的存储单元。存储单元。例如:例如:int*p,a=5;p=&a;p+;/指针指针p后移后移4个字节个字节(4 4)两指针相减)两指针相减 当两个指针当两个指针指向同一数组时指向同一数组时,两个指,两个指针的相减针的相减才有意义才有意义。两个指针相减的结。两个指针相减的结果为一整数,表示两个指针之间数组元果为一整数,表示两个指针之间数组元素的个数。素的个数。(5 5)两个指针的比较运算)两个指针的比较运算 两个指针的比较一般用
14、于下列两种情况:两个指针的比较一般用于下列两种情况:一是比较两个指针所指向的对象在内存一是比较两个指针所指向的对象在内存中的中的位置关系位置关系;二是判断指针是否为空;二是判断指针是否为空指针。指针。void类型指针类型指针 指向指向voidvoid类型的指针是一种类型的指针是一种不确定类型不确定类型的指针,它的指针,它可以可以指向任何类型的变量指向任何类型的变量。实际使用。实际使用voidvoid型指针时,只有通过型指针时,只有通过强强制类型转换制类型转换才能使才能使voidvoid型指针得到具体变量的值。在型指针得到具体变量的值。在没有转没有转换前换前voidvoid型指针型指针不能不能进
15、行指针的算术运算。进行指针的算术运算。例如:例如:voidvoid*vpvp;/;/定义了一个定义了一个voidvoid型指针型指针vpvp intint i=6,i=6,*ipip;vpvp=&i;/=&i;/vpvp指向整型变量指向整型变量i i coutcout“i=”“i=”*vpvpendlendl;/;/错误错误 coutcouti=i=*(intint*)p)pendlendl;ipip=(=(intint*)vpvp;/;/ipip指向指向vpvp指向的变量指向的变量i i coutcouti=i=*ipipendlendl;指针与字符串指针与字符串 字符型指针:字符型指针:用
16、于存放字符型变量的地址,而用于存放字符型变量的地址,而字符串的本字符串的本质是以质是以00结尾的字符数组结尾的字符数组,一个字符型指针存储了,一个字符型指针存储了字符数组的第一个元素的地址,也就存储了字符串字符数组的第一个元素的地址,也就存储了字符串的地址,这个指针就指向了字符串。的地址,这个指针就指向了字符串。在定义一个字符数组时,可以将一个字符串在定义一个字符数组时,可以将一个字符串常量作为初值,但将字符串常量作为初值赋给字符常量作为初值,但将字符串常量作为初值赋给字符数组和将字符串常量作为数组和将字符串常量作为初值初值赋给字符指针变量,赋给字符指针变量,二者的含义是不同的。二者的含义是不
17、同的。例如:例如:char str5=abcd;char*p_str=abcd;指针与数组指针与数组 1 1 使用指针操作符使用指针操作符*存取数组存取数组 指针的加减运算的特点指针的加减运算的特点使得指针操作符特别适使得指针操作符特别适合处理存储在合处理存储在一段连续内存空间一段连续内存空间中的同类型数据。这中的同类型数据。这样,使用指针操作符来对数组及其元素进行操作就非样,使用指针操作符来对数组及其元素进行操作就非常方便。常方便。(1)(1)一维数组的指针操作一维数组的指针操作 当定义数组一维数组当定义数组一维数组T T aNaN(T(T为类型为类型),下式为,下式为存取数组元素存取数组元
18、素aiai 的等效方式:的等效方式:*(a+ia+i);而而a+ia+i为为aiai 的地址。的地址。数组指针数组指针 数组指针是指向数组的指针。数组指针是指向数组的指针。例如:例如:intint(*a_pa_p)5;)5;等效于下列定义方式:等效于下列定义方式:typedeftypedef intint I_A5;I_A5;I_A I_A *a_pa_p;数组与函数数组与函数 数组名数组名是一个地址,不能当作一个左值,是一个地址,不能当作一个左值,但是可以作为函数的形参,接受实参传送来但是可以作为函数的形参,接受实参传送来的地址。当形参接受实参传送来的地址后,的地址。当形参接受实参传送来的地
19、址后,形参数组与实参形参数组与实参共享内存中的一块空间共享内存中的一块空间。函。函数体通过形参对数组内容的改变会直接作用数体通过形参对数组内容的改变会直接作用到实参上。数组名作为形参是数组应用的一到实参上。数组名作为形参是数组应用的一个重要方面。个重要方面。举例举例 void void func(intfunc(int a,inta,int n)n)intint i;i;for(ifor(i=0;i=0;in;in;i+)+)aiai+=3;+=3;void main()void main()intint a=1,2,3,4;a=1,2,3,4;func(a,4);func(a,4);指向函数
展开阅读全文