电子科技大学c第五章构造数据类型.ppt
《电子科技大学c第五章构造数据类型.ppt》由会员分享,可在线阅读,更多相关《电子科技大学c第五章构造数据类型.ppt(49页珍藏版)》请在三一文库上搜索。
1、第五章 构造数据类型,丘志杰 电子科技大学 计算机学院 软件学院,枚举类型,“枚举”是指将变量所有可能的取值一一列举出来,变量的取值只限于列举出来的常量。枚举类型的声明的一般形式如下 : 当没给各枚举常量指定值时,其值依次默认为0、1、2、;在定义枚举类型时,也可使用赋值号另行指定枚举常量的值。,enum 枚举类型名 枚举常量1, 枚举常量2, 枚举常量n;,枚举!,数组,数组是一组在内存中依次连续存放的、具有同一类型的数据变量所组成的集合体。 数组元素用数组名与带方括号的数组下标一起标识。,一维数组定义与使用,一维数组定义的一般形式为: 数据类型 数组名常量表达式; 说明: 数组元素的类型可
2、以是void型以外的任何数据类型。 数组名代表数组元素在内存中的起始地址,是一个地址常量。,数组定义之后,系统会将从内存中为其分配一块连续的存储空间,从第1个数据元素开始依次存放各个数组元素。 例如: int a5;,一维数组的初始化,一维数组初始化的语法形式为: 数据类型 数组名 常量表达式 =初值1, 初值2, 初值n; 例如: int array3=5,6,7; int array23=1,2;,存取一维数组元素的语法形式为: 数组名 下标表达式; 读数组元素的地址通过数组名来读取,格式如下: 数组名+整型表达式; 或 ,使用数组要注意的地方,在使用数组时最常犯的错误是下标越界。 数组名
3、是一个地址常量,不能作为左值(赋值的目标)。因此,不能将一个数组整体拷贝给另外一个数组。例如: int a5,c5,i; a=c; /错误! 正确的方法是将对应的元素进行拷贝: for(i=0;i5;i+) ai=ci;,字符数组与字符串,存放字符型数据的数组称为字符数组。 1.用字符进行初始化 例如:char s1 =C,h,i,n,a; 2.用字符串进行初始化 例如:char s2 =“China“;,字符数组的使用,字符数组也是数组,我们同样可以通过数组名及下标引用数组中的元素。为方便对字符与字符串的处理,C+提供了许多专门处理字符与字符串的函数。 参看P118表5-1。,指针,指针是C
4、+语言最重要特性之一,也是C+的主要难点。 指针提供了一种较为直观的地址操作的手段,正确地使用指针,可以方便、灵活而有效地组织和表示复杂的数据。,地址与指针,地址:当定义一个变量后,内存中将会划出一块由若干个存储单元组成的区域,用于保存该变量的数据。在内存里每个存储单元都有各自的编号,称为地址。 指针:在C+中,提供了指针类型,它是一种用于存放内存单元地址的变量类型,地址就存储在这种指针类型的变量中。正因为指针变量存储的是地址,用它来指明内存单元,所以形象地称这种地址变量为指针。,指针变量的定义,例如: int *ip; /定义了一个int型的指针变量ip float *fp; /定义了一个f
5、loat型指针变量fp sizeof(ip)=sizeof(fp)=4;,定义指针变量的格式如下: 数据类型 * 变量名;,指针的初始化与赋值,(1)不要将一个非地址常量、变量以及无意义的实际地址赋给指针变量。如: int *p=100; / int *p=(int*)100;(对吗?) int *p=(char *)100; (2)可以使用一个已初始化的指针去给另一个指针赋值,但类型必须一致如果不一致,可进行强制类型转换。 char *p=NULL; int *ip=(int *)p+100;,数据类型 *指针变量名=初始地址表达式;,(3)对于基本数据类型的变量、数组元素我们可以使用取地址
6、运算符 /定义void类型的指针,指针运算,指针通常进行下列几种运算:赋值运算、取值运算、算术运算、相减运算、比较运算。 (1)* 和,(2)指针与整数的加减运算 指针的加减运算与普通变量的加减运算不同,由于指针存储的是变量的内存地址,指针加上或减去一个整数n,表示指针从当前位置向后或向前移动n个sizeof(数据类型)长度的存储单元。因此对于不同的数据类型,n的实际大小就不同。,(3)指针自增、自减运算 指针的自增、自减运算是指针加减运算的特例。指针的自增或自减表示指针从当前位置向后或向前移动sizeof(数据类型)长度的存储单元。 例如: int *p,a=5,b=6,c=7; p= /指
7、针p后移4个字节,指向a,(4)两指针相减 当两个指针指向同一数组时,两个指针的相减才有意义。两个指针相减的结果为一整数,表示两个指针之间数组元素的个数。 (5)两个指针的比较运算 两个指针的比较一般用于下列两种情况:一是比较两个指针所指向的对象在内存中的位置关系;二是判断指针是否为空指针。,void类型指针,指向void类型的指针是一种不确定类型的指针,它可以指向任何类型的变量。实际使用void型指针时,只有通过强制类型转换才能使void型指针得到具体变量的值。在没有转换前void型指针不能进行指针的算术运算。 例如: void *vp; /定义了一个void型指针vp int i=6, *
8、ip; vp=,指针与字符串,字符型指针: 用于存放字符型变量的地址,而字符串的本质是以0结尾的字符数组,一个字符型指针存储了字符数组的第一个元素的地址,也就存储了字符串的地址,这个指针就指向了字符串。 在定义一个字符数组时,可以将一个字符串常量作为初值,但将字符串常量作为初值赋给字符数组和将字符串常量作为初值赋给字符指针变量,二者的含义是不同的。 例如: char str5=“abcd“; char *p_str=“abcd“;,指针与数组,1 使用指针操作符*存取数组 指针的加减运算的特点使得指针操作符特别适合处理存储在一段连续内存空间中的同类型数据。这样,使用指针操作符来对数组及其元素进
9、行操作就非常方便。 (1) 一维数组的指针操作 当定义数组一维数组T aN (T为类型),下式为存取数组元素ai的等效方式: *(a+i); 而a+i为ai的地址。,数组指针 数组指针是指向数组的指针。 例如: int (* a_p) 5; 等效于下列定义方式: typedef int I_A5; I_A *a_p;,数组与函数,数组名是一个地址,不能当作一个左值,但是可以作为函数的形参,接受实参传送来的地址。,当形参接受实参传送来的地址后,形参数组与实参共享内存中的一块空间。函数体通过形参对数组内容的改变会直接作用到实参上。,举例,void func(int a,int n) int i;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子科技大学 第五 构造 数据类型
链接地址:https://www.31doc.com/p-3452451.html