C_C++程序设计教程 教学课件 ppt 作者 王连相 等 第9讲 复合数据类型1

上传人:w****i 文档编号:94557730 上传时间:2019-08-08 格式:PPT 页数:16 大小:592KB
返回 下载 相关 举报
C_C++程序设计教程 教学课件 ppt 作者 王连相 等 第9讲 复合数据类型1_第1页
第1页 / 共16页
C_C++程序设计教程 教学课件 ppt 作者 王连相 等 第9讲 复合数据类型1_第2页
第2页 / 共16页
C_C++程序设计教程 教学课件 ppt 作者 王连相 等 第9讲 复合数据类型1_第3页
第3页 / 共16页
C_C++程序设计教程 教学课件 ppt 作者 王连相 等 第9讲 复合数据类型1_第4页
第4页 / 共16页
C_C++程序设计教程 教学课件 ppt 作者 王连相 等 第9讲 复合数据类型1_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《C_C++程序设计教程 教学课件 ppt 作者 王连相 等 第9讲 复合数据类型1》由会员分享,可在线阅读,更多相关《C_C++程序设计教程 教学课件 ppt 作者 王连相 等 第9讲 复合数据类型1(16页珍藏版)》请在金锄头文库上搜索。

1、第9讲 复合数据类型,第6章 复合数据类型,C精华篇,6.1 指针类型 概念: 旅馆房间、房间编号、房间名称、派房牌(上写房间号)。 1)地址 给内存单元(一般是字节)的编号 。计算机根据它找到对应的字节进行访问(存取)。 高级语言中定义一个变量,编译时根据其类型分配相应数目的字节(如int 型分2个字节,float 分4个字节),将变量名与对应内存字节映射。 变量名 地址 内存单元 2)指针 给变量、数组、结构体、函数等分配的内存单元或块区的首地址。 假如有:long m=56000 则 : &m 就是 m的指针或者说是 m所占内存单元的首地址。此例中,56000就放在从这个地址开始的连续四

2、个字节中。 3)指针变量 定义一种特殊变量,这种变量专门存放指针,用它也可找到(指向)变量、数组、结构体、函数,这样的变量 称作指针变量。 按变量是直接寻址;按指针变量是间接寻址。 由于变量、数组、结构体、函数等所分配的内存单元或块区的大小及结构不同,指针变量因而也要定义成相应的类型,不能混用。,例 交换两数。 void swap( ); main( ) int a, b; scanf(%d%d”, ,2000H,2001H,2EA0H,2EA1H,a=10,b=8,内存,地址,变量,10,8,指针变量,p2=&b=2EA0H,:,:,:,3100H,3101H,3802H,3803H,200

3、0H,2EA0H,p1=&a=2000H,变量的指针变量 1) 指针变量的定义 * ; 例 int *p1, *p2; 2) 指针变量的赋值 指针变量=,其中:* 号是取值运算符。 * 与 定义时的 * 与使用时的 * 含义不同,前者表示定义的是指针变量;后者是对变量的取值运算。 定义了一个某类型的指针变量后,它可以指向任意一个同类型变量。 4)指针变量作函数参数 主调函数 被调函数 实参 形参 &a p p p,6.2 数组类型 数组的特点: (1) 数组中的每一个元素均属于同一类型,我们称这种类型为数组的基类型; (2) 每个数组中的元素个数一经确定后就保持不变,我们称它为数组的长度; (

4、3) 数组中的每个元素均为变量,我们用数组下标来直接访问数组的元素; (4) 数组中的元素还允许是数组类型,从而产生二维数组、多维数组等结构; (5) 在数组定义中,常量表达式的值虽然指出了数组元素的个数,但C编译器不做越界检查; (6) 数组名表示数组所用空间的首地址,也就是数组第0个元素的地址。是一个常量地址。 一、一维数组的声明 格式:类型 数组名常量表达式; 二、一维数组的引用与初始化,引用形式: 数组名下标 初始化形式:存储类别 数据类型 数组名数组长度=初始化值; 例: static int a5=10,20,30,40,50; 一般要求:只有定义为静态或外部存储的才能初始化。 三

5、、数组作为函数的参数(传递地址) 例:对一字符串反序输出。(exinver.c) 四、二维数组的声明 形式: 类型 数组名常量表达式常量表达式; 如:int scores503; 说明:编译程序为二维数组分配存储空间时是按行进行的,即先按顺序存放第一行的所有数据,然后接着按顺序存放第二行的所有数据,如此类推。二维数组scores的存储空间分配如下图所示:, . 25000 scores00 25002 scores01 25004 scores02 25006 scores10 25008 scores11 25010 scores12 . . . . 25298 scores492 .,五、

6、二维数组元素的引用与初始化 引用形式: 数组名行下标列下标 /下标为整数类型的表达式 如:scores201=100; 初始化形式:存储类别 数据类型 数组名常量1常量2=初值; 如:static int s34=50,60,80,20,40,90,70,100,10; 例 矩阵行列互换。Exmatrix.c 1 2 3 4 1 5 9 5 6 7 8 2 6 10 9 10 11 12 3 7 11 4 8 12 六、指针与数组 在语言中,指针与数组之间的关系是十分密切的。指针类型变量可以当作数组使用,数组类型变量也可以当作指针使用,即在语,言中,我们可以象访问指针一样访问数组,也可以象访问

7、数组一样访问指针。其区别为:数组名不能自加、自减,但指针变量可以。 例如:int a10,*p; p=a; p+或p-都是成立的,而a+ 或a-是不成立的。 而 *(a+I)、aI、*(p+I)、pI是等价的。 七、指针数组与数组指针 指针数组:指基类型为指针类型的数组,即该数组的每个元素均为一个指针。如果我们需要保留许多指针的值,也就是要保存多个变量的地址,就可以使用指针数组。 定义形式:数据类型 *数组名数组长度; 如: int *p10; /在此声明了一个包含10个整数类型指针变量的数组p。这里“*“并不是数组名字的组成部分,它只是告诉编译程序p是一个整数类型的指针数组,而不是简单的整数

8、类型数组。,例:建立如下距阵并输出 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 程序为: main() int a55=0,*p5,i,j; for(i=0;i5;i+) pi= ,数组指针:,定义形式:数据类型 (*指针变量名)长度; 如:int (*array_ptr)10;/申明了一个指针类型的变量array_ptr,它指向一个长度为10 的整数数组。 数组指针可以看成是二维的,此时与二维数组在存储上相同,但变量名是指针变量,可以进行指针运算。 引用方式: 若有:int (*p)4,a34; p=a; 引用: *(*(p+I)+j)

9、 aIj 例:exarrp.c,6.3字符串,一、字符串常量与变量:字符串变量是一个基类型为字符类型的数组变量,同样遵循“先声明、后使用”的原则,我们在声明字符串变量时,可用字符串常量作初始化。如:char name10=“limeixue”; 初始化方式有三种。 也可以定义指针变量指向字符串。如:char *name=“limeixue”; 二、字符串数组 定义:char * name12; 例:按姓名查询。Exsearch.c,三、字符串库函数(string.h) 1. char * strcat(char *str1, const char *str2); 作用: 将字符串str2连接到

10、字符串str1后,形成一个新字符串,原先str1的结束标记0被取消。函数返回值为str1。注意为字符串变量str1分配的存储空间一定要足够大,能够容纳两个字符串连接后的新字符串。如:char s1=“good ”,s2=“evening!”; strcat(s1,s2); 2. char * strchr(const char *str, int ch); 作用: 寻找字符串str中第一次出现字符ch的位置。如果找到ch,则返回指向该位置的指针;否则返回空指针。 3. int strcmp(const char *str1, const char *str2); 作用: 比较字符串str1和s

11、tr2的内容是否相同。如果str1小于str2则返回负数;如果str1等于str2则返回零;如果str1大于str2则返回正数。 4. char * strcpy(char *str1, const char *str2); 作用:将str2指向的字符串复制到str1指向的位置中并返回str1。注意为str1分配的存储空间必须能放得下str2指向的字符串。 注:char *str; strcpy(str,“Be careful”); 引起的问题。,5. unsigned int strlen(const char *str); 作用:返回字符串str中的字符个数,包括其中的空格与转义字符,但不包括字符串结束标记0。 6. char *strstr(const *str1, const char *str2); 作用:寻找字符串str2在字符串str1中第一次出现的位置,不包括str2的结束标记0。如果找到str2,则返回指向该位置的指针;否则返回空指针。 四、字符串应用 例1: 按姓名排序。(exnsort.c) 冒泡法排序(从小到大):n个数参与排序,每趟找出最大数存与最后,共n-1趟。每一趟中对相邻的两个元素进行比较,不符合次序的立即交换。 例2:打印出全班每个学生姓名的长度。Exlen.c,see you next time!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号