面向对象程序设计第8讲二维指针结构体-文档资料28页

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
多维数组及数组应用
赵红
2019/11/6
作业
2
写出程序运行结果。
用行指针操作二维数组,找出最大值。
void main()
本周上 { int a[2][3]={1,2,9,4,5,6}; 机测试 cout<<print(a,2,3)<<endl;
} P167自测题7.5
结构体
P164例7.5
指针数组就是数组中的每个元素均
1. 指针数组的定义 为指针类型
指针数组定义的一般形式:
数据类型标识符 *数组名[元素个数];
在这个定义中由于“[ ]”比“*”的优先级高,所 以数组名先与“[元素个数]”结合,形成数组的定义 形式,“*”表示数组中每个元素是指针类型,“数据类 型标识符”说明指针的目标变量的数据类型。例如:
2019/11/6
20
用sizeof运算符计算结构体变量所占内存空间
sizeof(date)
struct date { int year,month,day;}; num
8个字节
struct student
name
30个字节
{ char num[8];
sex
1个字节
char name[30];
}
2019/11/6
作业:
15
1、读P160例7.4
2、求一个2行3列的二维数组的转置数组。
3、有一个N×M矩阵,编程序求出其中最大 的那个元素的值及其所在的行、列位置。
• 4、从键盘接收数据并存入数组a[10],并调 用函数sort(a,n)对其进行排序,在主程序中 输出结果。(排序方法不限)
12
2019/11/6
7.2.4 二维数组应用举例(续)
13
【作业2】有一个N×M矩阵,编程序求出其中最大 的那个元素的值及其所在的行、列位置。
max=a[0][0],row=0,colum=0
for (i=0; i<N; i++)
for (j=0; j<M; j++)
a[i][j]>max
T
F
max=a[i][j]
int *ip[10];
char *cp[5];
24][8]={"Fortran","COBOL","BASIC","Pascal "};
char *cp[4]={c[0],c[1],c[2],c[3]};
char *str[5]={"int","long","char","float","double"};
⑴ 二维数组的地址
例如:int a[3][4];
① 二维数组名a是数组的首地址。
② 二维数组a包含三个行元素:a[0]、a[1]、a[2] 。
三个行元素的地址分别是:a、a+1、a+2。
而a[0]、a[1]、a[2]也是地址量,是一维数组名,
即*(a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。
for (i=0; i<N; i++)
for (j=0; j<M; j++)
if (a[i][j]>max) { max=a[i][j]; row=i;
程序运行情况如下: 34 56 12 12 67 43
colum=j;
max=67,row=1,colum=1
}
… … /* 输出数据 */
char name[30]; /* 姓名是字符数组类型 */
char sex;
/* 性别是字符型 */
int age;
/* 年龄是整型 */
char addr[60]; /* 住址是字符数组类型 */
int score[6]; /* 成绩是整型数组类型 */
};
2019/11/6
结构体
19
结构体类型与变量的说明
c = a;
结构体变量之间进行赋值时,系统将按成员一一对应赋值。
2019/11/6
结构体指针
24
2. 结构体成员的三种引用形式
struct date { int year, month, day;}; date d, *p=&d;
用结构体变量名的引用形式“:->”是指向结构体成员 d.year d.month d.day 运算符,优先级为一级
struct date { int year, month, day;}; struct student { char num[8], name[20], sex;
struct date birthday; float score; }; date a={"9606011","Li ming",'M',{1977,12,9},83},b,c;
year 4个字节
char sex; date birthday;
/* 成员为bi结rth构da体y 类m型on*th/
4个字节
char addr[60];
day 4个字节
int score[6];
addr
60个字节
};
score
24个字节
2019/11/6
结构体
结构体变量成员的引用
21
“.”是分量 运算符,运算
row=i
colum=j
输出绝对值最大的元素及行列下标
图7.6 查找最大元素
2019/11/6
#define N 2
14
#define M 3
main( )
{ int i,j,row,colum,max,a[N][M];
… … /* 输入数据 */
max=a[0][0]; row=colum=0;
lp=x;
q
q
q=x[0];
lp++;
lp
q++;
2000H 2019H 2019H 200cH 2019H 2019H
cannot convert from 'int [2][3]' to 'int *'
8
x[0][0] x[0][1] x[0][2] x[1][0] x[1][1] x[1][2]
• 5、编写两个子函数: • insert(a,n,i,x)完成在第i个位置上插入数 据x, • del(a,n,i)完成删除数组中第i个位置的元 素。
2019/11/6
第7章 结构体P162
16
结构体与结构体类型的定义
信息管理
一个学生的信息有学号、姓名、性别、年龄、住 址、成绩等。
一本图书的信息有分类编号、书名、作者、出版 社、出版日期、价格、库存量等。
int (*lp)[4], j;
for (lp=a; lp<a+3; lp++) { for (j=0; j<4; j++) cout<<*(*lp+j)<<" ";
0123 10 11 12 13
cout<<endl;
20 21 22 23
}
2019/11/6
10.7 指针与数组
10
10.7 指针数组
str[0] cp csptr[[01]] csptr[[12]] csptr[[23]] csptr[[34]]
Ci 数n 组t \0 Fl oo r n t g r \0a n \0 Cc Oh Ba Or L \0\0 Bf Al So I a C t\0 \0 Pd ao su c b a ll e\0 \0
a.birthday.year a.birthday.month a.birthday.day
结 构 体 变 量 a 的 各 成 员 可 分 别 表 示 为 a.num、 、a.sex、a.birthday、a.score
2019/11/6
结构体P163
22
结构体变量的定义与初始化
在定义结构体类型的同时定义变量
2019/11/6
10.3 指针与数组
9
10.3.1 指向数组的指针
lp a 0 1 2 3
2. 二维数组的指针
lp
10 11 12 13
lp
20 21 22 23
【例10.6】用指向一维数组的指针变量输出lp数组元素。
#include <iostream.h>
void main( )
{ int a[3][4]={{0,1,2,3},{10,11,12,13},{20,21,22,23}};
2019/11/6
8.3 指针与函数
8.3.3 指针变量作函数参数 2. 数组的指针作函数参数 ⑵ 二维二数维组数的组行的指指针针作作函函数数参参数数 例如被调函数abc的定义形式有以下三种: void abc(int b[2][4]) { …… } void abc(int b[ ][4]) { …… } void abc(int (*b)[4]) { …… } 在主调函数有如下定义: int a[2][4], (*p)[4]=a; 则调用abc函数时可用 abc(a) 或 abc(p)
x[0]是数组名,是元素x[0][0]的地址
x[1]---- x[1][0],x[1][1],x[1][2]
x[1]是数组名, 是元素x[1][0]的地址
2019/11/6
10.3 指针与数组
5
10.3.1 指向数组的指针
2. 二维数组的指针
a a[0] a+1 a[1] a+2 a[2]
a0 1 2 3 10 11 12 13 20 21 22 23
类型与变量是不同的概念。
应先定义一个结构体类型,而后再定义结构体变量。 系统对类型不分配空间,仅对变量分配空间。 只能对变量赋值、存取或运算,而不能对一个类型
赋值、存取或运算。
成员也可以是结构变量。 P167
成员名可与程序中的变量名相同时,也可与不 同结构体类型的成员名相同,二者代表不同的 对象。
} 程序输出结果: s1<s2
思考:若有语句 if (s1= =s2) printf("s1=s2");比较的是什么?
2019/11/6
二维数组可看作是一种特殊的一维数组
4
例如,可以把x数组看作是包含二个元素的一维数组, 每个元素又是一个含有三个元素一维数组。 x为行指针,x[0]为元素指针
x[0]---- x[0][0],x[0][1],x[0][2]
级别最高。
结构体变量成员引用的一般形式:
结构体变量名.成员名
struct date
{ int year, month, day;};
struct student
{ char num[8], name[20], sex; struct date birthday; float score; };
student a;
数组元素a[i][j]的地址可以表示为下列形式:
&a[i][j]、a[i]+j 、*(a+i)+j
2019/11/6
10.3 指向数组的指针
指向一维数组的指针变量的定义形式: 数据类型标识符 (*变量名)[元素个数]
int x[2][3]={{0,1,2},{10,11,12}};
int (*lp)[3],*q; lp
struct 结构体名
{ 成员定义表;
例如:
struct student
};
{ char num[8],name[20],sex;
结构体名 变量名表;
int age;
float score;
};
student st1,st[30];
2019/11/6
结构体
23
结构体变量的赋值运算
同类型结构体变量之间的赋值运算
2019/11/6
10.3 指针与数组
6
10.3.1 指向数组的指针
2. 二维数组的指针
a[0]+1 a[0]+2 a[0]+3
a[0]数组 0 1 2 3 a[1]数组 10 11 12 13 a[2]数组 20 21 22 23
⑵ 二维数组元素的地址
a[2]+1 a[2]+2 a[2]+3
a[0]、a[1]、a[2]是一维数组名, 所以a[i]+j是数组元素的地址。
struct为关键字;
结构体名是用户定义 的类型标识。
{ }中是组成该结构体 的成员。成员的数据 类型可以是C语言所允 许的任何数据类型。
2019/11/6
结构体
18
结构体与结构体类型的定义
例如学生类型的定义:
struct student
{ char num[8]; /* 学号是字符数组类型 */
2019/11/6
3
例如:比较两个字符串的大小。写出运算结果
#include <iostream.h> #include <string.h> void main( ) { char s1[ ]= "aBC",s2[ ]= "abc";
if (strcmp(s1,s2)==0) cout<<"s1=s2"; else if (strcmp(s1,s2)>0) cout<<"s1>s2"; else cout<<"s1<s2";
如何描述这些类型不同的相关数据?
结构体——一种构造类型数据 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员。
2019/11/6
结构体
17
结构体与结构体类型的定义
结构体类型定义的一般形式:
struct 结构体名 { 数据类型1 成员名1;
数据类型2 成员名2; ……
数据类型n 成员名n; };
相关文档
最新文档