第8章 结构体与共用体

合集下载

C语言练习题1

C语言练习题1

C语言练习题1第八章结构体与共用体1练习题一、c语言基础知识1.1选择题1.以下不是c语言的特点的就是(b)。

a.语言简洁紧凑b.能够编制出功能复杂的程序c.c语言可以直接对硬件操作d.c 语言移植性好2.以下字符序列中,不容用做c语言标识符的就是(b)。

a.abc123b.no.1c._123_d._ok3.正确的c语言标识符是(a)。

a._buy_2b.2_buyc.?_buyd.buy?4.恳请挑选出可以用做c语言用户标识符的一组标识符(b)。

a.voidb.a3_b3c.ford.2adefine_123-abcdowordifcasesizeof5.以下符号中,不属于转义字符的就是(b)。

a.\\\\b.\\0xaac.\\td.\\06.不属于c语言关键字的是(d)。

a.intb.breakc.whiled.character7.就是c语言提供更多的合法关键字的就是(b)。

a.floatb.signedc.integerd.char8.以下不能定义为用户标示符的是(d)。

a.一个主程序和若干子程序共同组成b.一个或多个函数共同组成c.若干过程共同组成d.若干子程序共同组成10.c语言程序的基本单位是(c)。

a.程序行b.语句c.函数d.字符20.下列变量定义中合法的是aa.short_a=1-.le-1;b.doubleb=1+5e2.5;c.longdo=0xfdal;d.float2_and=1-e-3;9xn21.与数学式子对应的c语言表达式是(c)。

2x?1a.9*x^n/(2*x-1)b.9*x**n/(2*x-1)c.9*pow(x,n)*(1/(2*x-1))d.9*pow(n,x)/(2*x-1)第八章结构体与共用体222.若存有代数式3ab,则不正确的c语言表达式是(c)。

cda.a/c/d*b*3b.3*a*b/c/dc.3*a*b/c*dd.a*b/d/c*323.已知各变量的类型说明如下:intm=8,n,a,b;unsignedlongw=10;doublex=3.14,y=0.12;则以下符合c语言语法的表达式是(a)。

结构体与共用体zlh

结构体与共用体zlh
数据类型
结构体中每个成员可以是不同的 数据类型,而共用体中所有成员 必须是相同的数据类型。
结构体与共用体的区别与联系
• 使用方式:结构体中每个成员都可以单独访问和操作,而 共用体中一次只能使用其中一个成员。
结构体与共用体的区别与联系
自定义类型
结构体和共用体都是用户自定义的数据类型 ,可以根据需要组合不同的数据类型。
对于大型结构体和共用体,可以使用指针成 员来减少直接内存占用。
在跨平台编程时,要注意不同平台下的内存 对齐规则可能不同,需要进行相应的调整。
05
结构体与共用体的应用案例
案例一:使用结构体实现学生信息管理
定义学生结构体
包含学生姓名、学号、性别、年龄等字段。
创建学生信息数组
根据学生数量,创建相应大小的学生信息数组。
访问速度较慢
访问结构体的成员变量时,需要通过 指针或引用等方式进行间接访问,相 对于直接访问基本数据类型,速度较 慢。
结构体与共用体的优缺点分析
内存占用小
共用体中的所有成员变量共享同一块内存空间,因此相对于 结构体,共用体的内存占用较小。
访问速度快
访问共用体的成员变量时,可以直接通过内存地址进行访问 ,速度较快。
封装性好
结构体可以将多个变量封装在一起,形成一个自定义的数据类型,方便数据的 处理和管理。
结构体与共用体的优缺点分析
• 可扩展性强:结构体可以方便地添加或删除成员 变量,以适应不同的应用场景和需求。
结构体与共用体的优缺点分析
内存占用较大
由于结构体中每个成员变量都占用独 立的内存空间,因此相对于基本数据 类型,结构体的内存占用较大。
赋值给共用体变量
可以给共用体的任何一个成员赋值,如`data.f = 3.14;`,表示将 `data`的`f`成员赋值为3.14。

2016C语言习题全集及答案:第八单元结构体和共用体

2016C语言习题全集及答案:第八单元结构体和共用体

第八单元结构体和共用体一、选择题1、说明一个结构体变量时系统分配给它的内存是。

A. 各成员所需要内存量的总和B. 结构体中第一个成员所需内存量C. 成员中占内存量最大者所需的容量D. 结构中最后一个成员所需内存量2、 C 语言结构体类型变量在程序执行期间。

A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在在内存中D. 没有成员驻留在内存中3、设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是。

A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名4、程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是。

A. 编译出错B. 程序将顺利编译、连接、执行C. 能顺利通过编译、连接、但不能执行D. 能顺利通过编译、但连接出错5、有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam",16};根据上述定义,能输出字母M 的语句是。

A. prinft(" %c\n",class[3].name);B. printf(" %c\n",class[3].name[1]);C. prinft(" %c\n",class[2].name[1]);D. printf(" %c\n",class[2].name[0]);6、下面程序的输出是。

C语言学习入门笔记之结构体与共用体

C语言学习入门笔记之结构体与共用体

结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。

在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。

定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。

上面的结构体声明中Student就是结构体名(结构体标记)。

2.花括号内是该结构体所包括的子项,称为结构体的成员。

“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。

对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。

例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。

例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。

C语言程序设计——结构体和共用体(完整版)

C语言程序设计——结构体和共用体(完整版)

printf(“name\tage\tjob\tclass/office\n”); for(i=0;i<PN;i++) {if(body[i].job==„s‟) printf(“%s\t%d\t%3c\t%d\n”,body[i].name, body[i].age,body[i].job,body[i].units.class); else printf(“%s\t%d\t%3c\t%s\n”,body[i].name, body[i].age,body[i].job,body[i].units.office); } }
birthday num name sex age month day year addr
§12.3结构体数组
结构体数组的每一个元素都是具有相同结构类型 的结构体变量。 例:struct student {int num; char name[20]; float score; }stu[3]; 其中,定义了一个结构体数组stu,共有3个元素, 每个元素都具有struct student的结构形式。
§12.6共用体
共用体(也称为联合)也是一种构造的数据类型。 共用体是将不同类型的数据组织在一起共同占用 同一段内存的一种构造数据类型。 例如,在校学生和教师都填写以下表格: 姓名 年龄 职业 单位 其中,职业分两类:教师和学生; 而单位一栏里,学生填写班级编号(整型类型), 教师填写某系某教研室(整型类型) 。
§12.7枚举数据类型
当某些变量仅由有限个数据值组成时,通常用枚 举类型来表示。 所谓枚举是指将变量的值一一列举出来,变量的 值只限于列举出来的值的范围内。如一周只有7天, 一年只有12个月等等。
注意:枚举类型是一种基本数据类型,而不是一 种构造类型。关键字为enum。

C语言程序设计实验结构体与共用体

C语言程序设计实验结构体与共用体

实验8:结构体与共用体一、实验目的1.掌握结构体类型变量的定义和使用;2.掌握共用体的概念与使用。

二、实验内容编写程序,实现如下功能:1.定义结构体变量,用它表示考生的学号、姓名(用英文表示)以及语文、数学、外语成绩。

输入两个考生的信息和各门课成绩并比较(按总分进行高低排序;当总分相同时,依次按语、数、外的顺序排序)。

2.设有一个教师与学生通用的表格,数据项包括:姓名、年龄、职业和单位,其中“职业”一项可分为“教师”和“学生”两类;对“单位”一项,教师填入“系部名称”(用字符类型表示),学生填入“班级编号”(用整型量表示)。

编程输入人员数据,再以表格输出。

三、实验结果记录第1题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.总分不同2.总分相同的情况2.1总分完全相同2.2总分相同但语文成绩不同2.3总分相同、语文成绩相同但数学成绩不同第2题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.正确输入2.错误输入四、实验小结:经过此次实验,我熟悉掌握了结构体的定义和使用,同时也掌握了共用体的使用。

对于程序1,基本思路是通过结构体定义变量,采用if-else语句嵌套,当总分相同且语文数学成绩均相同时就不必再进行一轮的if语句判断,因为此时两考生的英语成绩一定相同。

对于程序2,在结构体中定义了共用体,可对不同职业进行不同单位的划分。

基本思路是用malloc函数进行动态内存分配,确定要输入的样本数量,再进行数据的输入,在单位数据的输入时需要判断输入对象是学生还是老师,此时要用strcmp函数进行比较判断,输入结束后打印表格,用转义字符\t让表格更加美观,最后通过free进行内存释放。

8章 c语言程序设计 结构体,共用体与枚举类型

8章 c语言程序设计 结构体,共用体与枚举类型

当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。

结构体与共用体小结

结构体与共用体小结

结构体与共用体小结结构体与共用体小结一,结构体得概念与定义1,结构体得定义struct结构体名{数据类型成员名1;数据类型成员名1;、。

};这里数据类型可以就是复合类型,例如又就是一个结构体类型,即嵌套;2,结构体变量得定义struct 结构体名变量名1,变量名2,,,变量名n;或:struct结构体名{数据类型成员名1;数据类型成员名1;。

、}结构体变量1,结构体变量2;或:struct{数据类型成员名1;数据类型成员名1;。

、}结构体变量1,结构体变量2;三种方式,第三种方式得话,每次要定义这个类型得结构体变量都要重复得写这一段代码;其实定义了结构体后,struct 结构体名就就是一种新得类型,上述语句就像声明变量一样;3,结构体变量得引用只能对结构体变量中得各个成员分别输出,不能对一个结构体变量作为一个整体输出;嵌套得结构体类型得引用:结构体变量名。

结构体类型成员名、内嵌结构体得成员名;4,结构体变量得初始化struct 结构体名变量名= {初始化数据};或者在定义得时候就初始化: struct结构体名{数据类型成员名1;数据类型成员名1;。

、、}变量名= {初始化数据};二,结构体数组1,结构体数组得定义举例struct stu{int stu_nu;char name[20];floatscore;};struct stu student[5];或者:struct stu{int stu_nu;char name[20];float score;}student[5];或者:struct{int stu_nu;char name[20];float score;}student[5];跟定义结构体变量得三种形式就是一样得,只不过这里每次定义得结构体变量就是一个数组;每一个student[i]都就是struct stu类型得;2,结构体数组得初始化与引用略;三,结构体与指针1,指向结构体得指针得定义,同上,也就是三种形式;struct employeesemployee1,*p1;或者:struct employees、。

四川大学《c语言程序设计》课件-第8章 结构体与共用体

四川大学《c语言程序设计》课件-第8章 结构体与共用体
男 1999
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员

结构体与共用体

结构体与共用体

2020/12/16
15
8.1 结构体
8.1.2 结构体数组
定义结构体数组的方法和结构体变量相似:
(1) struct 结构体名 {成员表列} 数组名[数组长度];
(2) 先声明一个结构体类型,然后再用此类型定义结构体数组: 结构体类型 数组名[数组长度];
例8.3 编写程序,利用结构体数组存储和显示三个学生的信息。 算法描述:首先定义并初始化一个结构体数组,然后通过printf 函数输出到屏幕上即可。
return 0;
}
2020/12/16
17
8.1 结构体
程序分析: 程序中定义了一个外部结构体数组stu,共3个元 素,并作了初始化赋值。在main函数中用for语句 逐个输出各元素的各个成员值。
2020/12/16
18
8.1 结构体
8.1.3 结构体指针
指向结构体变量的指针
例8.4 使用指向结构体变量的指针来访问结构体变量的 各个成员。
struct student
{ int num;
char name[10];
float score; };
int main ()
{struct student stu[3]={{1, "Wang", 90.0}, {2, "Qian", 89.5}, {3, "Sun", 85.0}};
struct student *p; int i;
注意 : (1)在定义结构体变量时可以对它的成员初始化。初始化列表是用花括号 括起来的一些常量。如:
struct Student a={10001,"Li Ming",'M',"Bei Jing"};

C语言程序设计 Chapter8 结构体与共用体

C语言程序设计 Chapter8 结构体与共用体

struct date_type { int year; 结构体数组 int month; int day; 结构体数组的定义 }; ; struct stud_type { char name[10]; long num; char sex; struct date_type birthday; float score; char address[10]; }s1[3]; struct stud_type s2[5];
struct ym_type { 输入一个职工的工资信息, 例. 输入一个职工的工资信息,整体 int y; 赋值给另一个变量,在屏幕上输出。 赋值给另一个变量,在屏幕上输出。 int m; }; struct salary_type { char num[5]; char name[17]; struct ym_type ym; float salary; float other; float cost; };
#define N 5
char name[11]; int score; }t,s[N]; main() { /*输入基本信息 输入基本信息*/ 输入基本信息 /*选择排序成绩 选择排序成绩*/ 选择排序成绩 /*输出基本信息 输出基本信息*/ 输出基本信息 }
/*选择排序成绩 选择排序成绩*/ 选择排序成绩 for(i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) if(s[k].score<s[j].score) k=j; if(k!=i) { t=s[i]; s[i]=s[k]; s[k]=t; } }
第8章 结构体与共用体
概述
在事务处理中,常需要将一些关系密切但 在事务处理中 常需要将一些关系密切但类型不同的 并为其取一个整体名字, 数据项组织在一起,并为其取一个整体名字,形成一 并为其取一个整体名字 个结构。 语言中,就称其为 个结构。 语言中 就称其为结构体。 C语言中 结构体通常由不同数据类型的数据项(成员)组成 组成 一个结构体可包含若干成员,每个成员具有自己 一个结构体可包含若干成员 每个成员具有自己 的名字及数据类型。 的名字及数据类型。

结构体与共用体-枚举

结构体与共用体-枚举
枚举常量的定义
枚举常量是枚举类型的成员,每个枚举常量都有一个整数值与之对应,默认从0 开始,也可以显式指定。
枚举变量
枚举变量的声明
使用枚举类型名称声明枚举变量,例如`enum Color color;`。
枚举变量的赋值
枚举变量只能赋值为枚举常量列表中定义的整数 值或对应的枚举常量名称。
枚举变量的使用
嵌套共用体
嵌套共用体是一个共用体内部包含另一个共 用体或结构体的情况。
共用体变量
声明
共用体变量的声明方式与结构体 变量类似,需要使用共用体类型 名来定义变量。
访问
访问共用体变量的成员需要使用 成员访问运算符(.),且每次只 能访问一个成员。
01
02
定义
共用体变量是用来存储共用体类 型数据的变量。
03
结构体与共用体-枚举
目录
• 结构体概述 • 共用体概述 • 枚举概述 • 结构体、共用体与枚举的关系 • 结构体、共用体与枚举的应用实例 • 总结与展望
01
结构体概述
定义与特点
01
结构体是一种用户自定义的数据类型,允许将不同类型的数据 组合成一个有机的整体。
02
结构体中的数据可以是基本数据类型,也可以是其他结构体类
未来发展趋势预测
01 02
结构化数据处理
随着大数据时代的到来,处理结构化数据变得越来越重要。结构体作为 一种表示结构化数据的数据类型,将在数据处理和分析领域发挥越来越 重要的作用。
内存优化
共用体可以在相同的内存位置存储不同的数据类型,从而节省内存空间。 在内存资源紧张的情况下,共用体的使用将变得更加重要。
04
当需要提高代码的可读性和可维护性时,可以使用枚举类型来代替一 些硬编码的常量值。

C语言 第八章 结构体

C语言 第八章 结构体

共用体
3)直接定义联合变量 union {
int i;
float f; }num; 说明:(1)共用体变量的所有成员占有同一段内存,所占内存空 间是其成员中字节数最大的成员占有的字节数。
(2)共用体变量中可以定义许多不同类型的成员,但同一时刻只
有一个成员的数据有效。
共用体
4.共用体变量初始化 初始化时,只能对第一个成员的数据类型初始化。 例:union data num={10}; 正确 union data num={10,25.4}; 错误
结构体变量
方法三:定义结构体类型的同时定义结构体变量,省略结构体类型名
struct DATE{ int year; int month; int day;}; struct {
long int number;
char name[8]; int age;
char *sex;
struct DATE birthday; }stu1,stu2;
数据类型
数据类型
成员名1;
成员名2;
//成员表
……
};
结构体类型
2.结构体类型的定义: 说明: (1) struct是关键字,标识一个结构体类型定义的开头 (2)“结构体类型名”是表示该结构体类型的名称的标识符,可
类比int、char
(3)“成员表”是构成结构体类型的成份,由一个或多个成员构
成,每个成员有自己的成员名。各成员数据类型可以不同,既可以
枚举类型
3.枚举变量定义
方式一:类型和变量分开定义 enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//定义枚举类型 enum WEEKDAY w;//定义枚举变量w
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

结构体变量的引用说明
不允许将一个结构体变量作为一个整体进行输入 输出, 输出,而只能对结构体变量中各个成员分别进行输 入输出. 入输出. 错误! 如:scanf(" …", &b); 错误 printf(" …", b); 错误 错误! 对成员变量可以象普通变量一样进行各种运算. 对成员变量可以象普通变量一样进行各种运算. 可以引用成员的地址, 可以引用成员的地址,也可以引用结构体变量的 地址. 地址. 表示结构体变量b的首地址 如:&b 表示结构体变量 的首地址 &b.num 表示结构体变量b 的成员num 的地 表示结构体变量 的成员 址
三,结构体变量的初始化
b c num
name[20]
如:
num
name[20]
struct student score[4] { long num; char name[20]; int score[4张三 70,75,80,85},c; 张三", 张三
score[4]
结构体类型和结构体变量的定义和使用
结构体类型需要自定义, 结构体类型需要自定义,先定义结构体类型 再定义结构体变量. 后,再定义结构体变量. 结构体类型定义包含:结构体类型中成员数 结构体类型定义包含:结构体类型中成员数 成员名称和成员类型. 量,成员名称和成员类型. 结构体变量定义包含:结构体类型, 结构体变量定义包含:结构体类型,结构体 变量名称. 变量名称.
Go5.3.7
若有定义: 例:若有定义: struct st{char name[20]; int age; char sex;} a[30],*p=a; 则以下错误的语句是( 则以下错误的语句是( C ) scanf("%s %s",p[0].name); A) scanf( %s ,p[0].name); B) scanf("%d ,&p[0].age); scanf( %d",&p[0].age); %d scanf("%d %d",&(*p.age); C) scanf( %d ,&(*p.age); scanf("%c ,&p%c",&p D) scanf( %c ,&p->sex);
§8.4 联合类型
联合类型是一种类似于结构体的构造型数 据类型, 据类型,它准许不同类型和不同长度的数 据共享同一块存储空间. 据共享同一块存储空间.
一,联合类型和联合变量的定义
联合类型定义与结构体类似 union 联合类型名 成员名1 { 类型 成员名1; … 成员名n 类型 成员名n; };
{struct student {long num; char name[20]; int score[4];} stu[5]; int i,j; for (j=0;j<5;j++) {printf("请输入学号和姓名 请输入学号和姓名:"); 请输入学号和姓名 scanf("%ld%s",&stu[j].num,stu[j].name); printf("请输入成绩 请输入成绩:"); 请输入成绩 for(i=0;i<4;i++) scanf("%d",&stu[j].score[i]); } for (j=0;j<5;j++) {printf("%10ld %-20s",stu[j].num,stu[j].name); for(i=0;i<4;i++) printf(" %5d",stu[j].score[i]); printf("\n"); } }
Name[20] score[4]
通过指针引用结构体成员
用指针引用结构体成员的方式: 用指针引用结构体成员的方式: (*结构体指针名) (*结构体指针名) . 成员 结构体指针名 或 结构体指针名–> 结构体指针名 >成员名
P x num
Name[20]
score[4]
x.num等同于(*p1).num等同于p1->num x.num等同于(*p1).num等同于p1等同于(*p1).num等同于p1
应区分结构体名与结构体变量名. 应区分结构体名与结构体变量名.
(4)成员也可以是一个结构体变量 (4)成员也可以是一个结构体变量 struct date {int month; int day; int year; }; struct student {int num; char name[20]; char sex; int age; struct date birthday; char addr[30]; }student1,student2;
§8.2 结构体数组的定义及初始化
结构体数组的定义也有三种方式 方式(2) 如:方式(2) struct student {long num;char name[20]; int score[4];
结构体数组初始化
}a[3]={{20030001,"zhang",89,90,91,92}, {20030002,"liu",68,69,70,71}, {20030003,"li",57,58,59,60} };
a[0]
数组各元素在内存中 连续存放, 连续存放,如右图所 示.
a[1]
a[2]
200300001 "zhang" 89 90 91 92 200300002 "liu" 68 69 70 71 200300003 "li" 57 58 59 60
用结构体数组存放并输出5 例 ( )用结构体数组存放并输出5个学生记录 main
成员也可以是一个结构体变量. 成员也可以是一个结构体变量. 成员名可以与程序中其它变量同名, 成员名可以与程序中其它变量同名,二者不代表 同一对象,但为增强可读性,不提倡这样做. 同一对象,但为增强可读性,不提倡这样做.
二,结构体变量的定义
(1)先定义结构体类型, (1)先定义结构体类型,再定义结构体变量 先定义结构体类型 struct student 结构体变量占用内存大 {long num; 小为各成员占用内存大小之 char name[20]; 可用sizeof( sizeof(结构体类 和,可用sizeof(结构体类 int score[4]; 型名) sizeof(结构体变量 型名)或sizeof(结构体变量 }; 名)求出 struct student b; (2)在定义结构体类型 (2)在定义结构体类型 的同时定义结构体变量 struct student {long num; char name[20]; int score[4]; }b; (3)不定义结构体名, (3)不定义结构体名,直 不定义结构体名 接定义结构体变量 struct 无名 {long num; 结构 char name[20]; 体 int score[4]; }b;
union area { char c_data; short s_data; long l_data; };
联合类型的定义与结构体定义很类似,只是关键 联合类型的定义与结构体定义很类似, 词不同: 词不同: struct ----- union 几个成员占用同一个内存段,因此,联合变量所 几个成员占用同一个内存段, 几个成员占用同一个内存段 因此, 占的内存长度应为最长的成员长度
指向运算符: 指向运算符: -> 功能: 对指针所指向的结构体的成员进行访问. 功能: 对指针所指向的结构体的成员进行访问. 优先级: 最高, 的优先级相同. 优先级: 最高,与"."的优先级相同. 的优先级相同
++p1++p1->num 等同于 *p1*p1-> num 等同于
++(p1++(p1-> num) (p1*(p1-> num)
第八章 结构体与共同体
§8.1 结构体和共用体概述
数组可以存放一组相关的同类型数据, 数组可以存放一组相关的同类型数据,但是不 一组相关的同类型数据 能将不同类型的数据放入同一数组中. 能将不同类型的数据放入同一数组中. 如果需要把一个学生的学号,姓名,性别, 如果需要把一个学生的学号,姓名,性别,年 各门功课的考试成绩等不同类型的数据 不同类型的数据放 龄,各门功课的考试成绩等不同类型的数据放 在一个构造型数据类型中, 在一个构造型数据类型中,就需要另外一种新 的数据类型:结构体类型或者共用体类型数据 数据. 的数据类型:结构体类型或者共用体类型数据. 一个结构体类型的变量中可以独立存放多种类 一个结构体类型的变量中可以独立存放多种类 结构体类型的变量中可以独立 型的数据,一个共用体类型的变量中可以共用 共用体类型的变量中可以 型的数据,一个共用体类型的变量中可以共用 同一段存储单元来存放不同类型的数据 来存放不同类型的数据. 同一段存储单元来存放不同类型的数据.
§8.3 指向结构体类型的指针
结构体指针变量的定义也有三种方式 x P 方式(1) 如:方式(1) num struct student {long num;char name[20]; int score[4];}; struct student *p1,*p2; 表示p1 p2均是指向结构体变量的指针变量 p1, 均是指向结构体变量的指针变量, 表示p1,p2均是指向结构体变量的指针变量,可 以指向任何struct 类型的结构体变量. 以指向任何struct student 类型的结构体变量. 如: struct student x,a[3]; p1=&x; p2=a;
相关文档
最新文档