面向对象程序设计第8讲二维指针结构体.ppt_第1页
面向对象程序设计第8讲二维指针结构体.ppt_第2页
面向对象程序设计第8讲二维指针结构体.ppt_第3页
面向对象程序设计第8讲二维指针结构体.ppt_第4页
面向对象程序设计第8讲二维指针结构体.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

2019/4/26,1,多维数组及数组应用,赵红,2019/4/26,2,作业,写出程序运行结果。 用行指针操作二维数组,找出最大值。 void main() int a23=1,2,9,4,5,6; coutprint(a,2,3)endl; P167自测题7.5 P164例7.5,本周上机测试结构体,2019/4/26,3,例如:比较两个字符串的大小。写出运算结果,#include #include void main( ) char s1 = “aBC“,s2 = “abc“; if (strcmp(s1,s2)=0) cout0) couts2“; else cout“s1s2“; ,程序输出结果: s1s2,思考:若有语句 if (s1= =s2) printf(“s1=s2“);比较的是什么?,2019/4/26,4,x0是数组名,是元素x00的地址,x1是数组名, 是元素x10的地址,二维数组可看作是一种特殊的一维数组,x0- x00,x01,x02,x1- x10,x11,x12,例如,可以把x数组看作是包含二个元素的一维数组,每个元素又是一个含有三个元素一维数组。 x为行指针,x0为元素指针,2019/4/26,5, 二维数组的地址 例如:int a34; 二维数组名a是数组的首地址。 二维数组a包含三个行元素:a0、a1、a2 。,三个行元素的地址分别是:a、a+1、a+2。 而a0、a1、a2也是地址量,是一维数组名, 即*(a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。,10.3 指针与数组,10.3.1 指向数组的指针,2. 二维数组的指针,2019/4/26,6, 二维数组元素的地址 a0、a1、a2是一维数组名,所以ai+j是数组元素的地址。,数组元素aij的地址可以表示为下列形式: &aij、ai+j 、*(a+i)+j,10.3 指针与数组,10.3.1 指向数组的指针,2. 二维数组的指针,2019/4/26,7, 二维数组元素的表示法 数组元素可用下列形式表示: aij、*(ai+j)、*(*(a+i)+j),10.3 指针与数组,10.3.1 指向数组的指针,2. 二维数组的指针,a 是二维数组,根据C的地址计算方法,a经过两次 * 操作才能访问到数组元素。所以 * a 是 a0,* * a 才是 a00。 a0是a00的地址,*a0是a00。,2019/4/26,8,int x23=0,1,2,10,11,12; int (*lp)3,*q; lp=x; q=x0;,10.3 指向数组的指针,指向一维数组的指针变量的定义形式: 数据类型标识符 (*变量名)元素个数,lp+;,q+;,cannot convert from int 23 to int *,2019/4/26,9,【例10.6】用指向一维数组的指针变量输出数组元素。 #include void main( ) int a34=0,1,2,3,10,11,12,13,20,21,22,23; int (*lp)4, j; for (lp=a; lpa+3; lp+) for (j=0; j4; j+) cout*(*lp+j)“ “; coutendl; ,10.3 指针与数组,10.3.1 指向数组的指针,2. 二维数组的指针,0 1 2 3,10 11 12 13,20 21 22 23,2019/4/26,10,指针数组定义的一般形式: 数据类型标识符 *数组名元素个数; 在这个定义中由于“ ”比“*”的优先级高,所以数组名先与“元素个数”结合,形成数组的定义形式,“*”表示数组中每个元素是指针类型,“数据类型标识符”说明指针的目标变量的数据类型。例如: int *ip10; char *cp5;,10.7 指针与数组,10.7 指针数组,1. 指针数组的定义,指针数组就是数组中的每个元素均为指针类型,2019/4/26,11,例如:P191 char c48=“Fortran“,“COBOL“,“BASIC“,“Pascal“; char *cp4=c0,c1,c2,c3; char *str5=“int“,“long“,“char“,“float“,“double“;,2019/4/26,12,8.3 指针与函数,2. 数组的指针作函数参数, 二维数组的指针作函数参数,二维数组的行指针作函数参数 例如被调函数abc的定义形式有以下三种: void abc(int b24) void abc(int b 4) void abc(int (*b)4) 在主调函数有如下定义: int a24, (*p)4=a; 则调用abc函数时可用 abc(a) 或 abc(p),8.3.3 指针变量作函数参数,2019/4/26,13,7.2.4 二维数组应用举例(续),【作业2】有一个NM矩阵,编程序求出其中最大的那个元素的值及其所在的行、列位置。,图7.6 查找最大元素,2019/4/26,14,#define N 2 #define M 3 main( ) int i,j,row,colum,max,aNM; /* 输入数据 */ max=a00; row=colum=0; for (i=0; imax) max=aij; row=i; colum=j; /* 输出数据 */ ,程序运行情况如下: 34 56 12 12 67 43 max=67,row=1,colum=1,2019/4/26,15,作业:,1、读P160例7.4 2、求一个2行3列的二维数组的转置数组。 3、有一个NM矩阵,编程序求出其中最大的那个元素的值及其所在的行、列位置。 4、从键盘接收数据并存入数组a10,并调用函数sort(a,n)对其进行排序,在主程序中输出结果。(排序方法不限) 5、编写两个子函数: insert(a,n,i,x)完成在第i个位置上插入数据x, del(a,n,i)完成删除数组中第i个位置的元素。,2019/4/26,16,一个学生的信息有学号、姓名、性别、年龄、住址、成绩等。 一本图书的信息有分类编号、书名、作者、出版社、出版日期、价格、库存量等。 如何描述这些类型不同的相关数据?,结构体与结构体类型的定义,?,信息管理,结构体一种构造类型数据 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员。,第7章 结构体P162,2019/4/26,17,struct 结构体名 数据类型1 成员名1; 数据类型2 成员名2; 数据类型n 成员名n; ;,结构体,结构体与结构体类型的定义,结构体类型定义的一般形式:,struct为关键字; 结构体名是用户定义的类型标识。 中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型。,2019/4/26,18,例如学生类型的定义: struct student char num8; /* 学号是字符数组类型 */ char name30; /* 姓名是字符数组类型 */ char sex; /* 性别是字符型 */ int age; /* 年龄是整型 */ char addr60; /* 住址是字符数组类型 */ int score6; /* 成绩是整型数组类型 */ ;,结构体,结构体与结构体类型的定义,2019/4/26,19,结构体,结构体类型与变量的说明,类型与变量是不同的概念。 应先定义一个结构体类型,而后再定义结构体变量。 系统对类型不分配空间,仅对变量分配空间。 只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。,成员也可以是结构变量。 P167,成员名可与程序中的变量名相同时,也可与不同结构体类型的成员名相同,二者代表不同的对象。,2019/4/26,20,struct date int year,month,day; struct student char num8; char name30; char sex; date birthday; /* 成员为结构体类型 */ char addr60; int score6; ;,用sizeof运算符计算结构体变量所占内存空间 sizeof(date),2019/4/26,21,“.”是分量运算符,运算级别最高。,结构体,结构体变量成员的引用,结构体变量成员引用的一般形式: 结构体变量名.成员名,结构体变量a的各成员可分别表示为a.num、、a.sex、a.birthday、a.score,struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; ; student a;,a.birthday.year a.birthday.month a.birthday.day,2019/4/26,22,结构体P163,结构体变量的定义与初始化,在定义结构体类型的同时定义变量,例如: struct student char num8,name20,sex; int age; float score; ; student st1,st30;,struct 结构体名 成员定义表; ; 结构体名 变量名表;,2019/4/26,23,结构体,结构体变量的赋值运算,同类型结构体变量之间的赋值运算,结构体变量之间进行赋值时,系统将按成员一一对应赋值。,struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; ; date a=“9606011“,“Li ming“,M,1977,12,9,83,b,c; c = a;,2019/4/26,24,结构体指针,2. 结构体成员的三种引用形式,用结构体变量名的引用形式: d.year d.month d.day,struct date int year, month, day; date d, *p=,用结构体指针变量的引用形式: (*p).year (*p).month (*p).day p-year p-month p-day,“-”是指向结构体成员运算符,优先级为一级,p=&d.year,2019/4/26,25,结构体,结构体的指针,【例】分析自增自减运算对程序结果的影响。 struct code int i; char c; a =100,A,200,B, 300,C,400,D;,2019

温馨提示

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

评论

0/150

提交评论