Presentation is loading. Please wait.

Presentation is loading. Please wait.

第10章 结构体与共用体 概述 结构体 共用体 枚举类型.

Similar presentations


Presentation on theme: "第10章 结构体与共用体 概述 结构体 共用体 枚举类型."— Presentation transcript:

1 第10章 结构体与共用体 概述 结构体 共用体 枚举类型

2 “结构” 是一种构造数据类型,它是由若干数据项组合而成的复杂数据对象,这些数据项称为结构的成员。
结构简介 问题: 存储一个班级中 5 名学员的信息(学号、姓名、性别和成绩) 解决方案: I. 使用数组 II. 使用多维数组 不能建立数组间的关系 01 02 03 04 05 num III. 使用结构 C 语言不允许一个数组包含多种数据类型 Mary John Peter Rose Kate F M 01 02 03 04 05 89 78.5 67 97.5 64 C 语言引入了称为结构的数据存储方式 Mary John Peter Rose Kate name num name sex score F M sex score 89 78.5 67 97.5 64 “结构” 是一种构造数据类型,它是由若干数据项组合而成的复杂数据对象,这些数据项称为结构的成员。

3 §10.1 概述 结构体(structure)是用户自定义的一种数据类型,包含若干个类型不同的数据项。
§10.1 概述 结构体(structure)是用户自定义的一种数据类型,包含若干个类型不同的数据项。 用途:把不同类型的数据组合成一个整体。而分别用独立变量来表示不能反映它们之间的内在联系。 例:定义一个结构体类型student,包含学号、姓名、性别、年龄、成绩、家庭地址。

4 §10.1 概述 结构体类型的定义 struct 结构体名 { 类型标识符 成员名1; 类型标识符 成员名2; …… }; 合法标识符
可省略:无名结构体 结构体类型的定义 struct 结构体名 类型标识符 成员名1; 类型标识符 成员名2; …… }; struct是关键字,不能省略 成员类型可以是基本类型或构造类型 必须有分号

5 定义结构 struct structurename { datatype variable1; datatype variable2;
结构名 struct structurename { datatype variable1; datatype variable2; ... }; 结构成员 C 语言中的有效数据类型 struct student { int num; char name[20]; char sex; float score; };

6 定义结构 struct student { int num; char name[20]; char sex; float score;
}; student num name sex score 结构定义并不预留内存 结构定义放置在程序的开始部分,位于头文件声明之后 结构定义仅描述了一个结构的形式。如果要在程序里使用结构,需要声明结构变量。

7 可以改写成int year,mongth,day;
日期结构体类型:由年、月、日三项组成 struct date { int year; int month; int day; }; 可以改写成int year,mongth,day; struct std_info { int num ; char name[20]; char sex; float score; char addr[30]; struct date birthday; }; 学生信息结构类型:由学号、姓名、性别、成绩、地址和生日共6项组成

8 §10.1.1结构体变量的定义 间接定义法: 直接定义法: 先定义结构体类型,后定义结构体变量 在定义结构类型的同时,定义结构变量
结构体类型名student可以不写 struct student { int num ; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1,stu2; struct student { int num ; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;

9 num name sex age score addr
struct student { int num ; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; num name sex age score addr stu1: 2 20 1 2 4 30 stu1在内存中共占字节数: =59

10  §10.1.3 结构体变量的引用 结构体变量的引用原则
结构体变量不能整体输入输出,要通过成员运算符“.”,逐个访问其成员,且访问的格式为: 结构体变量.成员 “.”是成员运算符,优先级最高 struct date { int year; int month; int day; }; struct date birth; printf("%d,%d,%d",birth); printf("%d,%d,%d",birth.year, birth.month,birth.day);

11 结构体变量的引用原则 如果某成员本身又是一个结构类型,则只能通过多级的分量运算,对最低一级的成员进行引用。
struct date { int year; int month; int day; }; 如果某成员本身又是一个结构类型,则只能通过多级的分量运算,对最低一级的成员进行引用。 结构变量.成员.子成员.….最低级子成员 struct std_info { int num ; char name[20]; char sex; float score; struct date birthday; }student; 引用结构变量student中的birthday成员的格式分别为: student.birthday.year student.birthday.month student.birthday.day num name sex score birthday 对最低一级成员,可像同类型的普通变量一样,进行相应的各种运算。 student:

12 结构体变量的初始化 结构体类型名 结构体变量={初值表}; 一般形式 说明
结构体类型名 结构体变量={初值表}; 说明 若某成员本身又是结构体类型,则该成员的初值为一个初值表 初值的数据类型,应与结构变量中相应成员的类型一致 struct std_info { int num ; char name[20]; char sex; float score; struct date birthday; }; struct std_info student={102, "Zhangsan", 'M', 85, {1980,9,20}} ;

13 结构变量初始化 student1 struct student { int num; char name[20]; char sex;
float score; }; struct student student1,student2; 结构变量初始化 赋值的顺序应与成员声明时的顺序一样;允许初始化语句中的值的数目比结构成员数目少。 struct student student1={1,"Yao Ming ",'M',90.5}; 内存 student1 1 Yao Ming M 90.5 student1.name student1.num student1.score student1.sex

14 结构变量赋值 用输入语句或赋值语句来给结构变量的各个成员赋值 78 student3 = student2; student2 1
student2.num=1; student2.name="Zhang Zi Liang"; student2.sex=’M’; printf("请输入成绩:\n"); scanf("%f",&student2.score); 78 student3 = student2; student2 1 Zhang Zi Liang M 78 student3 1 Zhang Zi Liang M 78

15 使用结构示例 stu1 李亚鹏 1 M 78 stu2 周晶晶 2 F 92 问题描述: 根据学员的成绩,输出不及格学员的详细信息。
#include<stdio.h> struct student { int num;//学号 char *name;//姓名 char sex;//性别 float score;//成绩 }; void main() static struct student stu1={1,"李亚鹏",'M',61}; static struct student stu2={2,"周晶晶",'F',92.5}; static struct student stu3={3,"姚光明",'M',59}; printf("不及格学员的名单如下:\n"); if(stu1.score<60) printf("%d\t%s\t%c\t%5.2f\n",stu1.num,stu1.name,stu1.sex,stu1.score); if(stu2.score<60) printf("%d\t%s\t%c\t%5.2f\n",stu2.num,stu2.name,stu2.sex,stu2.score); if(stu3.score<60) printf("%d\t%s\t%c\t%5.2f\n",stu3.num,stu3.name,stu3.sex,stu3.score); if(stu1.score>=60 && stu2.score>=60 && stu3.score>=60) printf("没有不及格的学员。\n"); } 使用结构示例 stu1 李亚鹏 1 M 78 stu2 周晶晶 2 F 92 问题描述: 根据学员的成绩,输出不及格学员的详细信息。 stu3 姚光明 3 M 59 不及格学员的名单如下: 姚光明 M

16 [例] 定义一个结构变量stu,用于存储和显示一个学生的基本 情况。
struct std_info {int num ; char name[20]; char sex; struct date birthday; }; main() { struct std_info stu={102, "Zhangsan", 'M', {1980,9,20}} ; printf("Num: %d\n",stu.num); printf("Name: %s\n",stu.name); printf("Sex: %c\n",stu.sex); printf("Birthday: %d-%d-%d\n",stu.birthday.year, stu.birthday.month, stu.birthday.day); } struct std_info stu; scanf("%d%s %c%d%d%d", &stu.num,stu.name,&stu.sex,&stu.birthday.year,&stu.birthday.month,&stu.birthday.day);

17 §10.2结构体数组 定义:结构数组的每一个元素,都是结构类型数据,均包含结构类型的所有成员。 struct student
{int num ; char name[20]; char sex; int age; float score; }; struct student stu[3] ; stu[0] stu[1] stu[2] 101 Lilin M 18 87.5 102 Zhanghua 99 103 Wuli F 19 78.5

18 结构体数组初始化: 结构体类型名 结构体数组名[n]={{初值表1},{初值表2}, ...,{初值表n}};
struct student {int num ; char name[20]; char sex; int age; float score; }; struct student stu[3]={{101,"Lilin",'M',18,87.5}, {102,"Zhanghua",'M',18,99},{103,'Wuli",'F',19,78.5}} ;

19 [例]定义结构类型struct std_info,定义一个结构数组stu,用于存储和显示三个学生的基本情况。
struct date {int year; int month; int day; }; struct std_info {int num ; char name[20]; char sex; struct date birthday; } stu[3]={{102,"Zhangsan",'M',{1980,9,20}}, {105,"Lisi",'M',{1980,8,15}}, {112,"Wangwu",'F',{1980,3,10}} }; main() { int i; printf("No. Name Sex Birthday\n"); for(i=0; i<3; i++) { printf("%-7d",stu[i].num); printf("%-9s",stu[i].name); printf("%-4c",stu[i].sex); printf("%d-%d-%d\n",stu[i].birthday.year, stu[i].birthday.month,stu[i].birthday.day); } } 程序运行结果: No Name Sex Birthday Zhangsan M Lisi M Wangwu F

20 }leader[3]={“Lian”,0,“ABian”,0,”Song“,0}; main()
<例> 统计后选人选票 struct person { char name[20]; int count; }leader[3]={“Lian”,0,“ABian”,0,”Song“,0}; main() { int i,j; char leader_name[20]; for(i=1;i<=10;i++) { scanf("%s",leader_name); for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } for(i=0;i<3;i++) printf("%5s:%d\n",leader[i].name,leader[i].count); name count Lian ABian Song

21 §10.3 指向结构体类型数据的指针 指向结构体变量的指针 结构体变量在内存中的起始地址称为结构体变量的指针。 main()
struct student { int num ; char name[20]; char sex; int age; float score; }; main() {struct student stu; struct student *p=&stu; p->num=101; strcpy(p->name,"lilin");} struct student { int num ; char name[20]; char sex; int age; float score; }; main() {struct student stu; struct student *p=&stu; (*p).num=101; strcpy((*p).name,"lilin");}

22  引用结构体变量成员的三种形式: 结构体成员运算符"."和"->"的比较: 结构体变量.成员名 stu.num
若struct student stu; struct student *p=&stu;则 结构体变量.成员名 stu.num (*p).成员名 (*p).num p->成员名 p->num 结构体成员运算符"."和"->"的比较: 二者的优先级相同,自左向右结合 运算符"."前面只能是结构体变量名或(*p) 运算符"->"前面只能是指向结构体的指针变量名,不能是其它变量名 stu->num 设有以下语句: struct st{int n;struct st *next;}; static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p; p=&a[0]; 则表达式( )的值是6。 A.p++->n B.p->n C.(*p).n D.++p->n 分析下列表达式: p->num p->num++ ++p->num D

23  指向结构体数组的指针 说明: 如果指针变量p指向结构体数组,则p+1指向结构体数组的下一个元素,而不是当前元素的下一个成员。
p=stu; p=stu.name; (++p)->num (p++)->num struct student {int num ; char name[20]; char sex; int age; }; struct student stu[3]={{101,"Lilin",'M',18,}, {102,"Zhanghua",'M',18}, {103,'Wuli",'F',19,}} ; struct student *p=stu; main() {for( ; p<stu+3; p++) printf("%d,%s,%c",p->num,p->name,p->sex); } num name sex age stu[0] p stu[1] stu[2] p+1

24 x y aa dt p 50 60 70 80 &dt[0] &dt[1] &dt[2] &dat[3] 10 20 30 40 p++ <练>下面程序的输出结果为( )。 struct st { int x; int *y; } *p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; main() { p=aa; printf("%d\n",++p->x); printf("%d\n",(++p)->x); printf("%d\n",++(*p->y)); } A B C D

25 用结构体变量和指向结构体的指针作函数参数
用结构体类型数据作为函数参数有以下三种形式: 用结构体变量的成员作参数 用法与普通变量作参数相同,值传递 用结构体变量作参数 函数的实参和形参必须都是结构体变量,程序效率低,不主张用 用指向结构体变量的指针作参数 提高运行效率

26 §10.4 用指针处理链表 一、链表结构 链表的三要素: 头指针变量head-指向链表的首结点(链表中每一个元素称为一个结点)
§10.4 用指针处理链表 一、链表结构 Head 1249 A 1356 B 1475 C 1021 D NULL 链表的三要素: 头指针变量head-指向链表的首结点(链表中每一个元素称为一个结点) 每个结点由2个域组成: 数据域-----存储结点本身的信息 指针域-----存储后继结点的指针(地址) 尾结点的指针域为NULL(空),作为链表结束的标志

27 §10.5 共用体 概念: 共用体类型的定义 ----与结构体类型的定义类似 使几个不同的变量占有同一段内存空间的结构称为共用体
union 共用体类型名 类型标识符 成员名1; 类型标识符 成员名2; …… }; union category { int class; char position[10]; }

28 共用体变量的定义----与结构体变量的定义类似
间接定义法: 先定义共用体类型,后定义共用体变量 直接定义法: 在定义共用体类型的同时,定义共用体变量 union data {int i; char ch; float f; }; union data un1,un2,un3; union data {int i; char ch; float f; }un1,un2,un3;

29 2000 2001 2002 2003 un1: ch i f union data {int i; char ch; float f;
注意:共用变量占用的内存空间,等于最长成员的长度,而不是各成员长度之和。 union data {int i; char ch; float f; }; union data un1,un2,un3; un1: ch i f un1占用的内存空间为4字节(不是2+1+4=7字节)。

30 共用体变量的引用 特点 与结构体变量的引用一样,也只能逐个引用共用体变量的成员 un1=1; m=a;un1.i=1;m=un1.i;
(1)系统采用覆盖技术,实现共用变量各成员的内存共享,所以在某一时刻,最后一次存入的成员值是起作用的。 例如,执行un1.i=1; un1.ch='c'; un1.f=3.14后,un1.f才是有效的成员。 (2)由于所有成员共享同一内存空间,故共用变量与其各成员的地址相同。 例如,&un1==&un1.i==&un1.ch==&un1.f。 (3)不能对共用体变量进行初始化(注意:结构体变量可以);也不能将共用变量作为函数参数,以及使函数返回一个共用体数据,但可以使用指向共用变量的指针。 (4)共用类型可以出现在结构类型定义中,反之亦然。

31 结构体与共用体 区别: 存储方式不同 联系: 两者可相互嵌套 struct node { char ch[2]; ch int k; a
union node }b; a ch k b 变量的各成员同时存在 任一时刻只有一个成员存在

32 struct date { int day; int month; int year; union { int share1;
下面定义中sizeof(a)和sizeof(a.share)的值是? struct date { int day; int month; int year; union { int share1; float share2; }share; } a; sizeof(a)=10 sizeof(a.share)=4

33 下面定义中变量w在内存中所占字节数? union aa { float x,y; char c[6]; }; struct st
{ union aa v; float w[5]; double ave; } w; sizeof(w)=34

34 下列程序输出结果是( )。 例 #include <stdio.h> main() {union {int k;
下列程序输出结果是( )。 #include <stdio.h> main() {union {int k; char i[2]; }*s,a; s=&a; s->i[0]=0x39; s->i[1]=0x38; printf("%x\n",s->k); } A  B C    D 共用体变量a a.i[0] a.k 或s->i[0] 或s->k a.i[1] 在内存中存储 形式为 或s->i[1]

35 下列程序输出结果是( )。 例 #include <stdio.h> main() {union {int k;
下列程序输出结果是( )。 #include <stdio.h> main() {union {int k; char i[2]; }*s,a; s=&a; s->i[0]=0x39; s->i[1]=0x38; printf("%x\n",s->k); } A  B C    D 共用体变量a s->i[0] s->k s->i[1] 在内存中存储 形式为

36 下列程序输出结果是( )。 例 #include <stdio.h> main() {union {int k;
下列程序输出结果是( )。 #include <stdio.h> main() {union {int k; char i[2]; }*s,a; s=&a; s->i[0]=0x39; s->i[1]=0x38; printf("%x\n",s->k); } A  B C    D 共用体变量a 低字节 s->i[0] s->k 高字节 s->i[1] 故s->k在 内存中存储数据为:

37 若有以下的说明、定义和语句,则输出结果为___。
若有以下的说明、定义和语句,则输出结果为___。 main() { union un { int a; char c[2]; } w; w.c[0]='A';w.c[1]='a'; printf("%o\n",w.a); } 共用体变量w w.c[0] w.a w.c[1]

38 若有以下的说明、定义和语句,则输出结果为___。
若有以下的说明、定义和语句,则输出结果为___。 main() { union un { int a; char c[2]; } w; w.c[0]='A';w.c[1]='a'; printf("%o\n",w.a); } 共用体变量w w.c[0] w.a w.c[1]

39 若有以下的说明、定义和语句,则输出结果为___。
若有以下的说明、定义和语句,则输出结果为___。 main() { union un { int a; char c[2]; } w; w.c[0]='A';w.c[1]='a'; printf("%o\n",w.a); } 共用体变量w w.c[0] w.a w.c[1] 故w.a在 内存中存储数据为:

40 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制
若有以下的说明、定义和语句,则输出结果为___。 main() { union un { int a; char c[2]; } w; w.c[0]='A';w.c[1]='a'; printf("%o\n",w.a); } 共用体变量w w.c[0] w.a w.c[1] 故w.a在 内存中存储数据为: 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制 1

41 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制
若有以下的说明、定义和语句,则输出结果为___。 main() { union un { int a; char c[2]; } w; w.c[0]='A';w.c[1]='a'; printf("%o\n",w.a); } 共用体变量w w.c[0] w.a w.c[1] 故w.a在 内存中存储数据为: 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制 1

42 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制
若有以下的说明、定义和语句,则输出结果为___。 main() { union un { int a; char c[2]; } w; w.c[0]='A';w.c[1]='a'; printf("%o\n",w.a); } 共用体变量w w.c[0] w.a w.c[1] 故w.a在 内存中存储数据为: 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制 5 1

43 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制
若有以下的说明、定义和语句,则输出结果为___。 main() { union un { int a; char c[2]; } w; w.c[0]='A';w.c[1]='a'; printf("%o\n",w.a); } 共用体变量w w.c[0] w.a w.c[1] 故w.a在 内存中存储数据为: 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制 5 1

44 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制
若有以下的说明、定义和语句,则输出结果为___。 main() { union un { int a; char c[2]; } w; w.c[0]='A';w.c[1]='a'; printf("%o\n",w.a); } 共用体变量w w.c[0] w.a w.c[1] 故w.a在 内存中存储数据为: 以八进制形式输出,二进制向八进制转换原则是:三位二进制对应一位八进制 6 5 1 运行结果: 60501

45 以下程序运行的输出结果是( )。 main() {union {char i[2]; int k; }r; r.i[0]=2;r.i[1]=0; printf("%d\n",r.k); } A.2    B.1    C.0    D.不确定 A

46 共用体变量e e.in.x e.a 或e.b e.in 程序运行的结果是________。 main() { union EXAMPLE { struct { int x; int y; }in; int a; int b; }e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf("%d,%d\n",e.in.x,e.in.y); } e.in.y

47 共用体变量e e.in.x e.a 或e.b 1 e.in 程序运行的结果是________。 main() { union EXAMPLE { struct { int x; int y; }in; int a; int b; }e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf("%d,%d\n",e.in.x,e.in.y); } e.in.y

48 共用体变量e e.in.x e.a 或e.b 2 1 e.in 程序运行的结果是________。 main() { union EXAMPLE { struct { int x; int y; }in; int a; int b; }e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf("%d,%d\n",e.in.x,e.in.y); } e.in.y

49 共用体变量e e.in.x e.a 或e.b 4 2 e.in 程序运行的结果是________。 main() { union EXAMPLE { struct { int x; int y; }in; int a; int b; }e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf("%d,%d\n",e.in.x,e.in.y); } e.in.y

50 §10.6 枚举类型 用途: 枚举类型的定义 enum 枚举类型名{取值表}; 枚举变量的定义----与结构体变量定义类似
如果一个变量只有几种可能的值,就可以定义成枚举类型 枚举类型的定义 enum 枚举类型名{取值表}; 例:enum weekdays {Sun,Mon,Tue,Wed,Thu,Fri,Sat}; 枚举变量的定义----与结构体变量定义类似 间接定义:enum weekdays work; 直接定义:enum weekdays {Sun,Mon,Tue,Wed,Thu,Fri,Sat } work;

51 说明: (1)枚举型仅适应于取值有限的数据。 例:1周7天,1年12个月。 (2)取值表中的值称为枚举元素,其含义由程序解释。
例:不是因为写成“Sun”就自动代表“星期天”。事实上, 枚举元素用什么表示都可以。 (3)枚举元素按常量处理,它们的值是定义时的顺序号(从0开始),所以枚举元素可以进行比较,比较规则是:序号大者为大! 例:上例中的Sun的值为0、Mon的值为1、……、Sat的值为6,所以Mon>Sun,Sat最大。 (4)枚举元素的值也是可以人为改变的:在定义时由程序指定。 例:如果enum weekdays {Sun=7, Mon=1 ,Tue, Wed, Thu, Fri, Sat};则Sun=7,Mon=1,从Tue=2开始,依次增1。 注意:不同的枚举元素不可以指定相同的值 (5)一个整数不能直接赋值给枚举变量 例:workday=2;(非法,因为类型不同) 改写成:workday=(enum weekday)2;

52 char *aa[]={"AA","BB","CC","DD"};
下面程序的输出是( )。 main() { enum team{my,your=4,his,her=his+10}; printf("%d %d %d %d\n",my,your,his,her); } A B C D C 下面程序的输出是 。 main() { enum em{em1=3,em2=1,em3}; char *aa[]={"AA","BB","CC","DD"}; printf("%s%s%s\n",aa[em1],aa[em2],aa[em3]); } DDBBCC

53 §10.10 用typedef定义类型 关键字 作用:用typedef定义已有类型的别名。该别名与标准类型名一样,可用来定义相应的变量。
定义已有类型别名的方法 (1)按定义变量的方法,写出定义体; (2)将变量名换成别名; (3)在定义体最前面加上typedef。 例:给结构类型struct date定义1个别名DATE。 struct date { int year, month, day; }; (1)按定义结构变量的方法,写出定义体:struct date {……} d; (2)将变量名换成别名: struct date {……} DATE; (3)在定义体最前面加上typedef: typedef struct date {……} DATE; 例:给实型float定义1个别名REAL。 (1)按定义实型变量的方法,写出定义体: float f; (2)将变量名换成别名: float REAL; (3)在定义体最前面加上typedef: typedef float REAL; typedef int *ipoin; ipoin p;

54 说明 (1)用typedef只是给已有类型增加1个别名,并不能创造1个新的类型。 (2)typedef与#define有相似之处,但二者是不同的:前者是由编译器在编译时处理的;后者是由编译预处理器在编译预处理时处理的,而且只能作简单的字符串替换。

55 3.若要说明一个类型名STP,使得定义语句STP s;等价于char *s;,以下选项中正确的是
2 .下面程序的输出是( )。 typedef union { long x[2]; int y[4]; char z[8]; } MYTYPE; MYTYPE them; main() { printf("%d\n",sizeof(them)); } A B C D.24 1.设有以下定义 typedef union { long i; int k[5]; char c; } DATE; struct date { int cat; DATE cow; double dog; } too; DATE max; 则语句printf(〞%d〞,sizeof(struct date)+sizeof(max)))的执行结果是( )。 A.25   B.30     C.18     D.8 C 4.设有以下说明语句 typedef struct  { int n; char ch[8]; }PER; 则下面叙述中正确的是 A) PER 是结构体变量名  B) PER是结构体类型名 C) typedef struct 是结构体类型  D) struct 是结构体类型名 3.若要说明一个类型名STP,使得定义语句STP s;等价于char *s;,以下选项中正确的是 A) typedef STP char *s; B) typedef *char STP; C) typedef STP *char; D) typedef char* STP ; B D B

56 D) 程序中可用INTEGER代替int类型名
若有以下说明和定义 typedef int *INTEGER INTEGER p,*q; 以下叙述正确的是______。 A) p是int型变量 B) p是基类型为int的指针变量 C) q是基类型为int的指针变量 D) 程序中可用INTEGER代替int类型名 B


Download ppt "第10章 结构体与共用体 概述 结构体 共用体 枚举类型."

Similar presentations


Ads by Google