面向对象程序设计C++第4章-复合数据类型_第1页
面向对象程序设计C++第4章-复合数据类型_第2页
面向对象程序设计C++第4章-复合数据类型_第3页
面向对象程序设计C++第4章-复合数据类型_第4页
面向对象程序设计C++第4章-复合数据类型_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学习目标 掌握一维数组和二维数组的定义、初始化和使用方法 理解字符数组与字符串的区别,掌握它们的使用方法 理解结构类型的含义,掌握结构类型变量的定义和使用 理解指针的含义,掌握指针的定义、初始化和使用方法4.1 一维数组4.1.1 一维数组的定义一维数组的定义格式为: ;其中: 类型标识符: 表示数组中所有元素的数据类型。数组名: 就是这个数组型变量的名称。常量表达式: 指出一维数组中元素的个数,即数组长度。4.2 二维数组4.2.1 二维数组的定义二维数组的定义格式为: ;其中: 常量表达式1: 表示数组的行数。常量表达式2: 表示数组的列数。4.2.2 二维数组的引用二维数组元素的引用形式

2、为: 4.2 二维数组4.2.3 二维数组的初始化二维数组的初始化,可以用以下两种方法来实现:(1) 按行赋初值int a34=11,12,13,14,21,22,23,24,31,32,33,34;赋初值后数组为:4.2 二维数组4.2.3 二维数组的初始化二维数组的初始化,可以用以下两种方法来实现:(2) 按在内存中的排列顺序给各元素赋初值 将所有数据写在一个花括号内,按数据排列的顺序对各元素赋初值。 对部分元素显式赋初值,未显式赋初值的元素将自动设为0。 若对全部元素显式赋初值,则数组第一维的元素个数在说明时可以不指定,但第二维的元素个数不能缺省。4.3 字符数组与字符串4.3.1 字符

3、数组1. 字符数组的定义 一维字符数组的定义格式为:char 数组名常量表达式; 二维字符数组的定义格式为:char 数组名常量表达式1 常量表达式2;2 字符数组的引用字符数组的引用和数值型数组一样,也是使用下标的形式。4.3 字符数组与字符串4.3.1 字符数组3. 字符数组的初始化一维字符数组的初始化,有如下几种方法:(1) 逐个字符赋给数组中各元素(2) 在定义字符数组时进行初始化,可以省略数组长度字符数组的长度也可用初值来确定(3) 利用字符串给字符数组赋初值4.3 字符数组与字符串4.3.2 字符串1字符串及其结束符0 字符串是用双引号括起来的若干有效字符序列,以0 (ASCII码

4、值为0)结尾,也可以看成是以0结尾的字符数组。例如:I am a student /正确,合法的字符串a /正确,合法的字符串a /错误!是单字符,非字符串morning /错误!没用双引号括起来字符串是利用字符数组存放的。在进行字符处理时,必须事先知道字符数组中的字符个数,这在程序设计过程中是很麻烦的一件事。4.3 字符数组与字符串3字符串的输入与输出在C/C+语言库函数中,提供以下两类字符串的输入与输出函数。(1) 格式化的字符串输入/输出函数:scanf()/ printf()(2) 非格式化的字符串输入/输出函数:gets()、cin.getline()/puts() 格式: gets

5、(字符数组名); cin.getline(char *, n);功能:读入键盘输入的字符串,并存储在字符数组中。 格式: puts( 字符数组名);功能:将字符数组中的字符串输出在屏幕上。4.3 字符数组与字符串4.3.3 字符串处理函数C+语言提供了一些字符串处理函数,这些函数的原型在头文件string.h中。1. 求字符串长度函数strlen( ) 格式: strlen(字符数组名);功能:计算字符串的实际长度(不包括结束符0)。函数的返回值为字符串的实际长度。2. 字符串复制函数strcpy( )格式: strcpy(目地字符数组名,源字符数组名);功能:把源字符数组中的字符串复制到目地

6、字符数组中,字符串结束符0 也一同复制。4.3 字符数组与字符串4.3.3 字符串处理函数C+语言提供了一些字符串处理函数,这些函数的原型在头文件string.h中。3. 字符串连接函数strcat( ) 格式: strcat(目地字符数组名,源字符数组名);功能:把源字符数组中的字符串连接到目地字符数组的后面,并删除目地字符数组中的字符串结束符0 。要求目地字符数组应有足够的长度,否则不能装下连接后的字符串。4.3 字符数组与字符串4. 两字符串比较函数strcmp( )、strncmp()函数strcmp()用于两字符串的比较,而函数strncmp()用于两字符串的前n个字符构成的子串的比

7、较。两个字符串大小比较效果与英文单词字典排列先后确定大小一致。格式: int r; r = strcmp(字符数组名1,字符数组名2); (或r = strncmp(字符数组名1,字符数组名2);)功能:按照ASCII码顺序比较两个字符数组中的字符串,并由函数返回值返回比较结果。返回值如下:r0 字符串1 0 字符串1 字符串2。4.4 结构体类型4.4.1 结构类型的定义定义一个结构类型的一般形式为:struct 结构类型名 数据类型 数据项1; 数据类型 数据项2; 数据类型 数据项n;4.4 结构体类型4.4.2 结构变量的定义定义了结构体类型Student,并不分配存储空间。只有定义了

8、相应的结构体变量,系统才分配内存空间。定义结构体类型变量有以下2种方法:1. 间接定义法先定义结构体类型,再定义变量 结构体变量定义的一般形式为: struct 结构类型名 变量名;4.4 结构体类型4.4.2 结构变量的定义2. 直接定义法在定义结构体类型的同时定义变量定义的一般形式为:struct 结构类型名 /此时,结构类型名可缺省 数据类型 数据项1; 数据类型 数据项2; 数据类型 数据项n;变量名表;4.4 结构体类型4.4.3 结构体变量的引用1简单结构变量的引用结构体变量的使用是通过对其每个成员的引用来实现的,一般形式如下: 结构体变量名.成员名2. 同类型结构变量间的引用AN

9、SI C新标准允许将一个结构类型的变量,作为一个整体赋给另一个同结构类型的变量。如有定义: struct Student stud1,stud2; 4.4.4 结构变量的初始化定义结构变量的同时,允许对结构变量初始化,但结构成员的数据类型与初值一致。4.5 结构体数组4.5.1 结构体数组的定义定义结构体数组的一般形式如下: struct 结构类型名 数组名;4.5.2 结构体数组的引用结构体数组元素也是通过数组名和下标来引用的。对结构体数组元素的引用与对结构体变量的引用一样,也是逐级引用,只能对最低级的成员进行存取和运算。结构体数组的引用的一般形式为:数组名下标.成员名4.5 结构体数组4.

10、5.3 结构体数组的初始化结构数组也可以在定义时进行初始化。其一般形式是: struct 结构体类型 结构数组名n=初值表1,初值表2, 初值表n;4.6 指 针4.6.1 指针的概念为了理解指针,必须了解计算机硬件系统的内存地址的概念。1内存地址在计算机硬件系统的内存存储器中,拥有大量的存储单元(以字节为单位)。为了便于管理,每一个存储单元都有唯一的编号,这个编号就是存储单元的“地址”。类似于教学楼中的每一个教室需要一个编号(按楼层、顺序编号)。例如,对16位机,DOS环境下的应用程序,其代码段、数据段和堆栈段放位于内存地址0 x00000 xffff之间的640k常规内存中。也就是说,程序

11、中的某一变量,对应0 x00000 xffff范围内中的某些存储单元。2变量的地址和变量的值在程序中定义变量时,计算机就按变量的类型,为其分配一定长度的存储单元。例如:int x,y;float z;4.6 指 针4.6.1 指针的概念为了理解指针,必须了解计算机硬件系统的内存地址的概念。(3) 指针变量与它所指向的变量的关系指针变量也是变量,在内存中也占用一定的存储单元,也有“地址”和“值”的概念。指针变量的“值”是另一实体(变量、数组或函数等)的地址。指针变量px与它所指向的变量x的关系,用指针运算符“*”表示为:*px即*px等价于变量x,因此,下面两条语句的作用相同。 x = 100;

12、 /将100直接赋给变量x *px= 100; /将100间接赋给变量x4.6 指 针4.6.2 指针变量的定义和初始化1. 指针变量的定义指针变量也是先定义后使用。指针变量的定义格式: 类型标识符 * 指针变量名;2. 指针变量的初始化在指针变量定义时,所存放的地址是随机的,未经赋值的指针变量不能使用。可以在定义时对其初始化。一般地,指针的定义和初始化形式为: 类型标识符 *指针变量名 = &变量名;4.6 指 针给指针变量赋值有以下两种方法。(1) 在定义指针变量的同时就进行赋值 int x; int *px = &x;(2) 先定义指针变量,之后再赋值 int x; int *px; p

13、x = &x;4.6 指 针4.6.3 指针变量的使用指针变量的使用“&”和“*” 两种运算来实现。1. 取地址运算符“&”赋值语句: px = &x ;就是通过取地址运算符“&”,把变量x的地址赋给指针变量px的,也就是使px指向x。于是就可以通过px间接访问x了。我们可以用图4-189形象地表示出来。4.6 指 针2. 指针运算符“*” px指向x后,就可以通过px间接访问它所指向的变量x了。*px就等价于x,所以,以下两条赋值语句: *px= 10; x = 10;是等价的,都是将10赋给x。同样,下两条语句: cout x endl; cout*pxendl;是以直接和间接方式输出变量

14、x的值,因此,输出结果都是10。4.6 指 针3变量的存取方式(1) 直接访问 在计算机内,对变量的访问其实是通过存储单元的地址进行的,比如,当机器执行语句coutx;时,机器先找到变量x的地址(即0 x2000),然后从 0 x20000 x2003这4个地址所对应的存储单元中的数据10(即变量x的值)取出,然后再输出。前面对变量的存取操作都是这种访问方式进行的。(2) 间接访问假设px是整型指针变量,它被分配到0 x20180 x201B单元,其值可以通过赋值语句“px=&x;”得到。4.6 指 针4.6.4 指针变量的自加、自减运算指针的自加、自减运算不同于普通变量的自加、自减运算,即它

15、不是简单的加1、减1。而是对应于内存地址的偏移量实施的,偏移量会随指针类型的不同而异。4.6.5 指针与数组指针和数组有着极为密切的联系。引用数组元素可以用下标法,也可以用指针法,两者相比而言,下标法易于理解,适合于初学者;而指针表示法有利于提高程序执行效率。1数组的指针数组在内存中的起始地址叫数组的指针。数组元素的指针是其元素在内存的起始地址。2指向数组的指针变量类似于指向变量的指针。4.6 指 针3. 数组元素的引用若有如下声明语句:int data6;int *p = data;则p是指向数组data的指针变量,指针和数组之间有如下恒等式: data+i = &datai = p+i (

16、i=0,1,5) datai = *(data+i) = *(p+i) = pi (i=0,1,5)所以,引用数组第i个元素,有以下几种访问方式:4.6 指 针(1) 下标法 datai / 数组名下标法: pi/ 指针变量下标法:(2) 指针法 *(data+i) / 数组名指针法: *(p +i)/ 指针变量指针法:4.6 指 针4. 指向字符串的指针用双引号“ ” 括起来的字符序列叫字符串,例如welcome to Shenzhen University!。字符串在内存中以0结尾。因为一个字符指针可以保存一个字符的地址,所以也可以定义和初始化它。例如:char * pc = GOOD MORNING;该语句定义了字符指针pc,并且用字符串的第一个字符的地址来初始化它,此外为字符串本身也分配了内存单元。假设字符串GOOD MORNING存放在从0 x2000开始的内存单元中。pc被分配了一个地址,pc指向字母G。4.6 指 针4.6.6 指针与结构一个结构体类型变量在内存中占有一段连续存储单元,这段内存单元的首地址,就是该结构体变量的指针。可以用一个指针变量指向一个结构变量,或指向结构数组中的元

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论