C 结构体,共同体和枚举解析
结构体、共用体与枚举

9.1.4 结构体变量的引用
1.引用结构体成员 在无嵌套的情况下,引用结构体变量成员的形
式为: 结构体变量名·成员名
其中的“.”叫“结构体成员运算符”,这样引
用的结构体成员相当于一个普通变量 ,例如: student.num
/* 结构体变量student的成员num,相当于一个长整型变量 */
stud2={"Yu Ping",19, 'F',34082, 'h',12,"25 Hefei Road",5531678};
注意初始化数据应与类型中的各个成员在位置上一一对 应。对于嵌套的结构体类型变量,初始化是对各个基本类型 的成员赋初值,例如:
struct person student={"Wang Li",12,5,1974, 'M',340201,'h',12,"13 Bejing Road",2098877};
/* 结构体变量student的成员name,相当于一个字符数组名 */
9.1.4 结构体变量的引用
在有嵌套的情况下,访问的应是结构体的基 本成员,因为只有基本成员直接存放数据,且数 据是基本类型或上面介绍的数组类型,引用形式 为:
结构体变量名·结构体成员名·…·结构体成员名·基本成员名
即从结构体变量开始,用成员运算符“.”逐 级向下连接嵌套的成员直到基本成员,不能省略 ,例如:
9.1.2 结构体变量的说明
2.在定义结构体类型的同时定义结构体变量。例如:
struct person { char name[20]; int age; …… long tel; }student,worker;
第十二讲结构体、共用体和枚举类型(C语言)

第十二讲结构体、共用体和枚举类型(C语言)第十二讲结构体、共用体和枚举类型本讲主要介绍C语言中的三种类型的定义和使用,其中两种是构造类型:结构体类型和共用体类型,一种是C语言的基本类型:枚举类型。
要求大家掌握结构体类型、共用体类型和枚举类型的变量的定义,掌握结构体类型和共用体类型变量及其成员的引用等基本操作,理解结构体数组的应用,理解结构体和共用体变量存储形式的不同,了解枚举类型变量的处理方式。
知识要点结构体类型的定义1. 结构体类型定义的一般形式2. 结构体类型定义中的注意事项结构体类型变量1. 结构体类型变量定义的三种方法2. 结构体类型变量的初始化3. 对结构体变量中成员的引用4. 对整个结构体变量的引用结构体数组1. 结构体数组定义的三种方法2. 结构体数组的初始化3. 对结构体数组元素的成员进行引用共用体1. 共用体类型和共用体变量定义的方式2. 共用体变量与结构体变量的区别3. 共用体变量成员的引用4. 共用体变量作为结构体变量的成员枚举类型1. 枚举类型和枚举变量定义的一般形式2. 枚举元素的处理§12.1 结构体类型的定义结构体类型定义的一般形式为:struct 结构体名{类型名1 成员名1;类型名2 成员名2;……类型名n 成员名n;};其中,struct是关键字,是结构体类型的标志。
结构体名是由用户定义的标识符,它规定了所定义的结构体类型的名称。
结构体类型的组成成分称为成员,成员名的命名规则与变量名相同。
§12.2 结构体类型变量一、结构体变量的定义定义结构体类型的变量有三种方法:1.先定义结构体类型,再定义变量。
注意:定义变量时,struct person必须在一起使用,它的用法与int、char等类型名的用法相同。
2.定义类型的同时定义变量。
3.直接定义结构体类型变量,省略类型名。
二、结构体变量的初始化将结构体变量各成员的初值顺序地放在一对大括号中,并用逗号分隔。
在st语言中枚举体 联合体 结构体区别

在C语言中,枚举体、联合体和结构体是用来定义新的数据类型的关键字。
它们都能够帮助程序员更好地组织数据,提高代码的可读性和可维护性。
在本文中,我们将深入探讨这三种数据类型的区别和特点。
一、枚举体(enum)1. 枚举体是一种由程序员定义的数据类型,用来表示一组有限的取值范围。
2. 在定义枚举体时,需要使用关键字enum,然后在花括号中列出枚举的取值。
3. 枚举体的每个取值都有一个对应的整数值,默认从0开始递增。
4. 枚举体可以用来定义一些常用的状态值,比如星期几、月份等。
5. 枚举体的定义形式如下:```enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};```二、联合体(union)1. 联合体也是一种由程序员定义的数据类型,用来表示相同的内存空间可以存储不同类型的数据。
2. 在定义联合体时,需要使用关键字union,然后在花括号中列出联合体的成员。
3. 联合体的大小等于其最大成员的大小。
4. 联合体的所有成员共享同一块内存,可以存储不同类型的数据。
5. 联合体可以用来节省内存空间,但在使用时需要谨慎,以避免数据混乱。
6. 联合体的定义形式如下:```union Data {int i;float f;char str[20];};```三、结构体(struct)1. 结构体是一种由程序员定义的复合数据类型,用来表示一组不同类型的数据。
2. 在定义结构体时,需要使用关键字struct,然后在花括号中列出结构体的成员。
3. 结构体的成员可以是不同类型的数据,可以是基本类型、数组、指针等。
4. 结构体的大小等于所有成员大小的总和,但可能会因为对齐规则而有所增加。
5. 结构体可以用来表示复杂的数据结构,比如学生信息、员工信息等。
6. 结构体的定义形式如下:```struct Student {int id;char name[20];float score;};```枚举体、联合体和结构体是C语言中用来定义新的数据类型的关键字,它们分别用来表示有限取值范围的枚举、共享内存空间的联合和复合数据类型的结构。
C语言知识总结——宏,枚举,结构体,共用体

C语言知识总结——宏,枚举,结构体,共用体1、define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。
因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
,因此在编译时它不对宏的定义进行检查,作用域不影响对常量的访问。
它的常量值只能是字符串或数字。
该命令有两种格式:一种是简单的常量宏定义, 另一种是带参数的宏定义。
不带参数的宏:#define< 名字 >< 值 > 要注意,没有结尾的分号,因为不是C的语句,名字必须是一个单词,值可以是各种东西,宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。
如有错误,只能在编译已被宏展开后的源程序时发现。
注意.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
宏定义其作用域为宏定义命令起到源程序结束。
如要终止其作用域可使用#undef命令带参数的宏:像函数的宏,一般的定义形式:带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意带参数宏的原则一切都要有括号,参数出现的每个地方都要有括号。
带参数的宏在大型的程序的代码中使用非常普遍,在#和##这两个运算符的帮助下可以很复杂,如“产生函数”,但是有些宏会被inline函数代替(C++的函数)使用宏好处:“提高运行效”。
定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
结构体、共用体、枚举

C语言——枚举类型定义符——typedef通过typedef创建一个新的类型,并为这个数据类型赋予一个名字,然后这个数据类型就可以再任何被允许的地方使用。
typedef int INTERGER;注意:通过typedef定义的标志符通常采用大写的形式。
例如:typedef char* STRING;STRING stringPtrAry[20];//char* stringPtrAry[20];枚举类型——enum枚举类型是一种基于标准整形类型的自定义类型。
在一个枚举类型中,每一个整形数值都被赋予一个标识符,而这个标识符就被称为枚举常量。
enum typeName{identifier list};关键字标志符枚举常量集合枚举名每一个枚举常量都被赋予一个整形数值。
如果程序员没有明确的位这些标识符赋值,编译器将自动为第一个标识符赋值为0,第二个为1,依次类推。
如果中间有一个元素被赋值,之后的元素值是前一元素值+1。
注意:枚举常量本质是个常量,不能再去定义一个同名的变量。
枚举类型——赋值C语言允许枚举常量赋予枚举常量(必须要是在这个常量前已经定义的枚举常量)和枚举变量、变量。
例如:enum color{RED, BLUE, GUEEN, WHITE};enum color x;x = BLUE;//1x = GUEEN;//2x = YELLOW;//错误,YELLOW不存在枚举变量可以赋予枚举常量,也可以赋予其他的常量,而且相互之间还可以进行运算,但是,C语言中并没有确保给枚举变量的赋值是合法的。
匿名枚举类型——常量如果在创建枚举类型的时候没有指定名字,那么这就是一个匿名枚举类型。
例如:enum {red, blue, green, white};由于枚举类型里的标示符都是常量,因此可以很方便的利用枚举类型声明常量。
C语言——结构体、共用体结构体——struct结构体是具有单一名字的相关元素的集合,而且这些元素可能是不同类型。
C++课件 第七章 结构体、共同体和枚举

总结
我们深入学习了C++中的结构体、共同体和枚举,并了解了它们的定义、使用和区别。通过此章的学习,我们 掌握了更多编程的技巧和灵活性。
练习题
Question 1
如何定义一个包含姓名、年龄和分数的结构体?
Question 2
请解释什么是枚举类型,它与结构体的区别是什么?
成员的访问和赋值
学习如何通过结构体变量访问和赋值结构体的成员。
结构体数组与共同体
结构体数组
掌握如何定义和使用结构体数组,处理多个结构体 对象的同时。
共ห้องสมุดไป่ตู้体
学习共通体的定义和使用,可以在同一内存地址存 储不同类型的数据。
枚举类型
1
定义和使用
了解如何定义和使用枚举类型,使用符
枚举成员
2
号常量表示一组相关的常量值。
学习如何使用枚举成员,为常量赋予更
加直观的语义。
3
枚举的好处
了解枚举类型在代码编写和代码可读性 方面的优势。
结构体、共同体和枚举的区别和联系
1 区别
详细探讨结构体、共同体 和枚举之间的差异,如内 存分配方式和使用场景。
2 联系
强调结构体、共同体和枚 举的共同点,如都是用于 数据类型的封装和组织。
3 灵活性和应用
参考资料
C++结构体和共同体
此篇文章说明了C++中如何定义和使用结构体和 共同体。
C++枚举类型
了解C++中枚举类型的定义和学习,学习枚举的 使用场景。
C++课件 第七章 结构体、 共同体和枚举
VC++程序设计 -第七章结构体、共同体和枚举类型

int id_no; int eng, phy, math; float ave; } stu1, stu2;
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体、共同体和枚举类型
1
定义:
将不同种类型的数据有序地组合在一起,构
造出一个新的数据类型,这种形式称为结构
体。 结构体是多种类型组合的数据类型。
2
struct
结构体名
关键字 结构体名
{ 成员列表 };
struct student { int num; char name[20];
不同数据 类型组成 的成员
9
结构体类型变量的引用 1、不能对结构体变量整体赋值或输出,只能分别对各个成 员引用。 错误 cin>>student1; 必须用成员名引用
cin>>student1.num;
student1.num=100;
可以将一个结构体变量整体赋给另外一个相同类型的结构 体变量。 student2=student1; 2、嵌套的结构体变量必须逐层引用。 student1.birthday.day=25; 3、结构体变量中的成员可以同一般变量一样进行运算。 student1.birthday.day++; student1.score+=60; 10
结构体数组 结构体数组中的每个元素都是一个结构体类型的变 量,其中包括该类型的各个成员。数组各元素在内
存中连续存放。
13
一、结构体数组的定义
struct student { int num; struct student { int num; char name[20];
char name[20];
char sex;
int age;
float score;
char sex;
int age;
char addr[30];
}; struct student stu[30];
float score;
char addr[30]; } stu[30]; 直接定义
14
二、结构体数组的初始化
struct student
8
4、结构体的成员可以是另一个结构体类型。
struct date { int month; int day; int year; }; }; 成员类型 struct student { int num; char name[20]; struct date birthday; 成员名
5、成员名可以与程序中的变量名相同,二者分占不同的内 存单元,互不干扰。例如,在程序中仍可以定义变量 int num;
};
STUDENT student1,student2;
5
二、在定义类型的同时定义变量
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2;
对局部变量类型的结构体变量初始化
void main(void) { struct student { long int num;
char name[20];
char sex;
char addr[30];
对变量初始化,一一赋值
} student1={901031, “Li Lin”, „M‟, “123 Beijing Road”}; cout<<<<endl;
{ int num; char name[20]; char sex; } stu[3]={ {1011, "Li Lin",'M'}, {1012,"Wang Lan",'F'}, {1013,"Liu Fang",'F'};
15
struct student { int num; char name[20]; char sex; } stu[ ]={ {1011,"Li Lin",'M'}, {1012,"Wang Lan",'F'}, {1013,"Liu Fang",'F'}};
char sex;
char addr[30];
};
分号不能少
3
定义结构体类型变量的方法 一、先定义结构体类型再定义变量名
struct student { int num; 结构体类型只是一种数据 char name[20]; 类型,不占内存空间,只 char sex; 有定义结构体类型变量时 int age; 才开辟内存空间。 float score; char addr[30]; }; struct student student1, student2;
紧接着定 义变量
6
struct 结构体名
{
成员列表
}变量名列表;
三、直接定义结构体类型变量
struct { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2; 不出现结构体名。
输出: LiLin
11
关于结构类型变量的使用,说明以下几点:
1、同类型的结构体变量之间可以直接赋值。这种 赋值等同于各个成员的依次赋值。 2、结构体变量不能直接进行输入输出,它的每一 个成员能否直接进行输入输出,取决于其成员的类 型,若是基本类型或是字符数组,则可以直接输入 输出。
3、结构体变量可以作为函数的参数,函数也可以 返回结构体的值。当函数的形参与实参为结构体类 型的变量时,这种结合方式属于值调用方式,即属 12 于值传递。(举例说明)
16
以下程序的结果是:
void main(void) { struct date { int year, month, day; } today;
结构体类型名 变量1 变量2
4
# define STUDENT struct student STUDENT { int num; char name[20]; char sex; int age; 凡是STUDENT的地
方都用struct student
机械替换。
float score;
char addr[30];
7
struct
{
成员列表
}变量名列表;1、结构体类型的变量在内Fra bibliotek依照其成员的顺序顺
序排列,所占内存空间的大小是其全体成员所占空
间的总和。
2、在编译时,仅对变量分配空间,不对类型分配 空间。
3、对结构体中各个成员可以单独引用、赋值,其
作用与变量等同。
格式:变量名 . 成员名 student1 . num