结构体、联合体、枚举

news/2024/5/19 1:21:21 标签: 结构体, 联合体, 枚举, 类型定义

1、结构体

 结构体类型一般形式:
 struct     结构体名 {
       类型名1     成员名1;
       类型名n     成员名n;
 };

 struct    :结构体类型
 结构体名:用户定义标识
 成员       :结构体组成成分,成员名命名规则与变量名相同

 注:定义结构体类型,只是说明结构体的组成,编译系统并未给其分配内存空间,就像系统不为 int 等类型本身分配空间一样。
       只有当定义了结构体类型变量时,系统才会分配内存空间给结构体变量。
       结构体变量所占内存空间是其成员所占内存空间之和。

 结构体变量的3种定义方式:

 a.先定义结构体类型再定义变量
      struct     student{
           char  name[20];
           int     age;
      };
      struct  student  strstudent;

 b.定义结构体类型的同时定义变量(常用)
      struct     student{
           char  name[20];
           int     age;
      }strstudent;

 c.直接定义结构体类型变量(无结构体名,用于不需再次定义此类型结构体变量的情况,即只定义一次该类型结构体变量)
      struct {
           char  name[20];
           int     age;
      }strstudent;

 结构体变量初始化:
 定义时初始化
      struct     student{
           char  name[20];
           int     age;
      }strstudent = {"Xiao Ming" , 20};


 结构体变量:
 对结构体变量的引用须在定义结构体变量之后进行;
 对结构体变量的引用可分为对结构体变量成员的引用和对整个结构体变量的引用;

 引用的一般形式为:结构体变量.成员名
 若某个成员本身即是结构体变量,须连续使用成员运算符 ' . ',直到最低一级成员才能进行运算;
 结构体变量的成员都属于某种数据类型,故可以像普通变量一样进行类型允许的运算;

 结构体数组:
 定义结构体数组方法与定义结构体变量一样,定义结构体变量的3种方法亦可用来定义结构体数组。不过较结构体变量多了数组的属性,在初始化和引用时有稍许不同,此时每一个数组元素都是一个结构体变量。

2、联合体(共用体)

 联合体类型一般形式:
 union  联合体名{
      类型名1  成员名1;
      类型名n  成员名n;
 };

 对比:
 结构体变量每个成员占有独立的内存区域
 而联合体变量所有成员共用一段内存区域
 故联合体变量所占内存大小为其成员中占内存空间最大的成员的大小

 结构体变量可直接引用
 而联合体变量不能直接引用,只能引用联合体变量的成员,引用方式同结构体变量

 注:由于联合体成员变量共用内存空间,故联合体变量中有效的总是最后一次存放的成员变量的值

3、枚举

 枚举类型定义的一般形式为: enum 枚举名{枚举元素1,枚举元素2,....};

 枚举类型变量两种定义方法:
 a.先定义枚举类型,再定义变量
 enum season{Spring,Summer,Autumn,Winter};
 enum season sea;

 b.直接定义枚举变量
 enum {Spring,Summer,Autumn,Winter} sea;

 在C编译中,将枚举元素当做整型常量处理,称为枚举常量,故不能对其赋值
 枚举常量的值取决于定义时枚举元素的排列顺序
 默认第一个元素值为0,其后元素值为前一元素值加1
 也可在定义时指定枚举元素的值,未被指定的元素值依旧为前一元素值加1

4、类型定义(取别名)

 定义新类型的一般形式:
 typedef 类型名 标识符;    
 struct student{
      char  name[20];
      int     age;
 };
 typedef struct student STUDENT;
 STUDENT stu;

 typedef并不是创造一个新类型,而是给已有类型取别名。

http://www.niftyadmin.cn/n/1353758.html

相关文章

类与面向对象

前面简介似的整理完了C语言的笔记,真是汗颜,不过这样开始也要比一直就那么放着要有意义。 这段时间就趁着所学还未完全冷却,好好回忆、整理、总结一下吧!接下来是C的笔记...1、从 C 到 C C是在C语言的基础上,增加了面向…

类的声明、定义及应用

1、类是对现实世界中事物的抽象,将具有相同属性的一类事物称作类,类的实例称为对象。类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体,类具有对数据的抽象性、隐藏性和封装性。类对象的行为…

构造与析构函数

1、构造函数作用:创建类对象,并初始化其成员。(可定义多个进行重载)注:构造函数可以有参数,无返回类型,不能是虚函数,在类体外定义时其函数名前加上“类名 : :”,可重载若一个类对象…

输入输出流、模板

1、输入输出流 在C中,用面向对象的方法实现流。为了实现流,从上到下定义了几种流类:a. ios 是抽象流基类b. ios 的派生类 istream 是输入流基类c. ios 的派生类 ostream 是输出流基类d. iostream 是输入/输出流类,由 istream 和 o…

命名空间与异常处理

1、命名空间 命名空间是一个逻辑上的类型组织系统,用来对程序中的类型进行逻辑上的分组,并使定义在同一个命名空间中的类可以利用命名空间直接相互调用。C有命名空间机制,关键字为 namespace。库或程序中每个C定义集被封在一个命名空间中&am…

汇编基础

前面粗略地整理了C和C的一些基础性的知识点,在这过程中也加深了其中一些重要知识点的理解。虽然还远谈不上有多么地深入浅出,至少还算符合当初写博客的初衷:乐于分享,利人利己!接下来对汇编语言作一个大致的整理和总结…

80X86寻址方式与常见汇编指令

1、指令指令:操作码和操作数组成(不定有操作数);操作码:执行操作,用一个唯一的助记符表示,对应着机器指令的一个二进制编码;操作数:操作对象,可以是数值,寄存器或存储器地…

OPCode及汇编

1、OPCode操作码(Operation Code,OPCode):描述机器语言指令中,指定要执行某种操作的机器码。OPCode与指令的对应关系:同类型的指令,OPCode不一定相同;B8 01000000 mov eax,1B8C7 …