资源描述:
《C_C++程序设计教程 教学课件 作者 王连相 等 第9讲 复合数据类型1.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9讲复合数据类型第6章复合数据类型C精华篇6.1指针类型概念:旅馆房间、房间编号、房间名称、派房牌(上写房间号)。1)地址给内存单元(一般是字节)的编号。计算机根据它找到对应的字节进行访问(存取)。高级语言中定义一个变量,编译时根据其类型分配相应数目的字节(如int型分2个字节,float分4个字节),将变量名与对应内存字节映射。变量名地址内存单元2)指针给变量、数组、结构体、函数等分配的内存单元或块区的首地址。假如有:longm=56000则:&m就是m的指针或者说是m所占内存单元的首地址。此例中,56000就放在从这个地址开始的连续四个字节中。3)指针变量定义一种特殊变
2、量,这种变量专门存放指针,用它也可找到(指向)变量、数组、结构体、函数,这样的变量称作指针变量。按变量是直接寻址;按指针变量是间接寻址。由于变量、数组、结构体、函数等所分配的内存单元或块区的大小及结构不同,指针变量因而也要定义成相应的类型,不能混用。[例]交换两数。voidswap();main(){inta,b;scanf(%d%d”,&a,&b);swap(&a,&b);printf(“%d,%d”,a,b);}voidswap(int*p1,int*p2){intt;t=*p1,*p1=*p2,*p2=t;}2000H2001H2EA0H2EA1Ha=10b=8内存地址
3、变量108指针变量p2=&b=2EA0H:::3100H3101H3802H3803H2000H2EA0Hp1=&a=2000H变量的指针变量1)指针变量的定义<类型标示符>*<变量名>;[例]int*p1,*p2;2)指针变量的赋值指针变量=&变量[例]先定义后赋值:p1=&a;p2=&b;定义时赋初值:inta,*prt=&a;其中:&是取指针(地址)运算符。赋初值问题:一个指针变量被定义后,在赋予某一变量的指针以前,其值是随机的,这个随机数可能恰好是系统区的某单元的地址。在系统不知和不受系统管理的情形下改写其中内容是危险的。变量的地址是由系统分配和管理的,因而是安全的。
4、3)指针变量的使用p1=&a;p2=&b;scanf(“%d%d”,p1,p2);t=*p1;*p1=*p2;*p2=t;其中:*号是取值运算符。*与&是一对互逆运算。例如:*(&a)<=>a;&(*p)<=>p*指针变量<=>变量例如:p=&a;*p就是a;定义时的*与使用时的*含义不同,前者表示定义的是指针变量;后者是对变量的取值运算。定义了一个某类型的指针变量后,它可以指向任意一个同类型变量。4)指针变量作函数参数主调函数被调函数实参形参&appp6.2数组类型数组的特点:(1)数组中的每一个元素均属于同一类型,我们称这种类型为数组的基类型;(2)每个数组中的元素个数一
5、经确定后就保持不变,我们称它为数组的长度;(3)数组中的每个元素均为变量,我们用数组下标来直接访问数组的元素;(4)数组中的元素还允许是数组类型,从而产生二维数组、多维数组等结构;(5)在数组定义中,常量表达式的值虽然指出了数组元素的个数,但C编译器不做越界检查;(6)数组名表示数组所用空间的首地址,也就是数组第0个元素的地址。是一个常量地址。一、一维数组的声明格式:类型数组名[常量表达式];二、一维数组的引用与初始化引用形式:数组名[下标]初始化形式:存储类别数据类型数组名[数组长度]={初始化值};例:staticinta[5]={10,20,30,40,50};一般要求
6、:只有定义为静态或外部存储的才能初始化。三、数组作为函数的参数(传递地址)例:对一字符串反序输出。(exinver.c)四、二维数组的声明形式:类型数组名[常量表达式][常量表达式];如:intscores[50][3];说明:编译程序为二维数组分配存储空间时是按行进行的,即先按顺序存放第一行的所有数据,然后接着按顺序存放第二行的所有数据,如此类推。二维数组scores的存储空间分配如下图所示:┃...┣━━━━━━━25000┃scores[0][0]┠───────25002┃scores[0][1]┠───────25004┃scores[0][2]┣━━━━━━━25
7、006┃scores[1][0]┠───────25008┃scores[1][1]┠───────25010┃scores[1][2]┣━━━━━━━.┃.┃....┃┠───────25298┃scores[49][2]┣━━━━━━━┃...五、二维数组元素的引用与初始化引用形式:数组名[行下标][列下标]//下标为整数类型的表达式如:scores[20][1]=100;初始化形式:存储类别数据类型数组名[常量1][常量2]={初值};如:staticints[3][4]={50,60,80,20