枚举类型、联合类型

1联合union

  联合 (union) 是一个能在同一个存储空间里(但不同时)存储不同类型数据的数据类型。

  编译器为联合分配足够的空间保存所描述的可能性的最大需要。

  下面是一个带有标记的联合模板例子:

    union hold{    //带有标记的联合的模板

      int digit;

      double bigf1;

      char letter;

    };

  下面是定义3个 hold 类型联合变量的例子

    union hold fit;      //hold类型的联合变量

    union hold save[10];  //10个联合变量的数组

    union hold *pu;      //指向hold类型变量的指针

  初始化联合:

    union hold valA;

    valA.letter = ‘R‘;

    union hold valB = valA;  //把一个联合初始化为另一个联合

    union hold valc = {88};   //初始化联合的 digit 成员

    union hold valD = {.bigf1 = 118.2}; //指定初始化项目

  联合的使用方法:即使有足够的空间,也不能同时保存2个值

    fit.digit = 23; //把 23 存储在 fit 中,使用 4 个字节

    fit.bigf1 = 2.0; //清除 23,存储2.0,使用 8 个字节

    fit.letter = ‘h‘; //清除 2.0,存储 ‘h‘,使用1个字节

2枚举enum

枚举值属于构造类型

enum 枚举名 {枚举值表};

例:

enum WeekDay
{
    Monday = 1,
    TuesDay,
    WednesDay,
    TursDay,
    FriDay,
    SaturDay,
    SunDay
};

枚举是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。

在枚举类型中声明的第一个枚举成员它的默值为0。以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。

1.在C编译系统中,枚举值是常量,不是变量,只有在定义时才能对其赋值,不能在程序中再使用赋值语句对他们赋值。

2.枚举值是常量,它们是有值的,按定义的顺序使它们的值为 0, 1, 2… 。

 上面定义的枚举类型 WeekDay 中,MonDay 的值为 0 ,TuesDay 的值为1 … ,这些都是系统自动赋给的。如果定义时赋值 MonDay=2 ,那么输出day的时候 day=4;如果定义时赋值 MonDay=2,同时赋值 FriDay=3 时,输出 day 的值还是 day=4 。

3.枚举值可以比较,枚举值的比较是按其定义时的值进行比较的。

if (SunDay]]]]>Monday)             //枚举值可以进行比较
    {
        printf("day = %d\n",day);
        printf("day2 = %d\n",day2);
    }

4.给枚举变量赋值时不能直接赋整数,因为它们属于不同的数据类型,应先强制类型转换才能赋值。

例:enum WeekDay day2;

day2=(enum WeekDay)4;

时间: 2024-10-26 12:25:20

枚举类型、联合类型的相关文章

标C编程笔记day05 函数声明、文件读写、联合类型、枚举类型

函数声明: 1.隐式声明:在没有声明的情况下,系统可根据参数类型判断去调用函数(有可能出错) 2.显式声明:声明在被调用之前,如:double add(double,double);  函数声明参数可只写类型,不需要写函数体. 文件操作: fopen  --打开文件,FILE *pFile=fopen("a.txt","w"); fopen的打开模式: r:只能读,要求文件存在 r+:可读可写,要求文件存在 w:只能写,创建文件,如果文件存在则先删除旧文件 w+:可

浮点型+字符(串)类型+时间类型+枚举与集合类型+约束条件

浮点型 分类:FLOAT DOUBLE decimal 应用场景:身高,体重,薪资 字段限制特点(5,3)前一位表示所有的位数,后一位表示小数个数 三者最大整数位和小数位对比: # 存储限制float(255,30)double(255,30)decimal(255,30)?# 精确度验证create table t9(x float(255,30));create table t10(x double(255,30));create table t11(x decimal(65,30));?i

枚举与集合类型 约束条件

枚举与集合类型 枚举(enum) 限制某个字段能够存储的数据内容 集合(set) 限制某个字段能够存储的数据内容 create table user( id int, name char(16), gender enum('male','female','others') ); insert into user values(1,'jason','xxx') # 报错 insert into user values(2,'egon','female') # 正确! create table te

3 日期类型/字符类型/枚举类型/集合类型/约束条件

create table student( id int, name char(6), born_year year, birth_date date, class_time time, reg_time datetime ); insert into student values (1,'eddie',now(),now(),now(),now()); 字符类型 1 char: 定长 2 varchar: 变长 #宽度指的是字符的个数 create table t1(name char(5))

返回枚举值的描述 根据枚举类型返回类型中的所有值、文本及描述

/// <summary> /// 返回枚举值的描述 /// </summary> /// <param name="value">枚举值</param> /// <returns>指定枚举值描述</returns> public static string getEnumDescription(this Enum value) { FieldInfo fi = value.GetType().GetField(v

使用联合类型

可以在 C# 中使用联合类型,但是,由于 C# 没有真正意义上的联合类型,因此,在 C# 中使用看上去不漂亮.在这一节,我们将讨论如何在 C# 中使用联合类型,以及作为库设计人员,如何可以决定库是否公开联合类型(虽然,我个人建议避免跨语言公开联合类型). 第一个例子,我们定义了一个简单的联合类型Quantity,它有两个构造函数,一个包含整数,另一个包含浮点数:还提供一个函数getRandomQuantity(),初始化 Quantity 的新实例. module Strangelights.D

MySQL数据类型--------枚举与集合类型实战

1. 背景 * MySQL数据库提供针对字符串存储的两种特殊数据类型:枚举类型ENUM和集合类型SET,集合类型数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧. 2. 枚举与集合类型所属空间与最大成员数量 类型 占用字节 最大成员数量 ENUM 1 or 2, 取决于枚举成员的数量 65535 SET 1|2|3|4|8,取决于集合成员的数量 64 3. 枚举与集合约束检查应用 * 创建表 e_s mysql> CREATE TABLE e_s(     -> uid 

5.任意值、类型推论、联合类型

1.任意值any,可以将任意类型的变量赋值给该类型的变量,没有指定类型的变量默认为any 也可以用来定义不定类型的数组 2.上面说到没有指定类型的变量默认为any类型的,但是当声明变量时定义了该变量值,则默认变量为该值得类型值,这就是类型推论 若声明时未定义,则不会 3.联合类型即可以取值为多种类型中的一种 下面的例子顶你声明了一个联合类型的变量,其类型可以是string和number中的一种,不可以为其他类型,其间用"|"隔开

TS学习随笔(二)-&gt;类型推论,联合类型

这篇内容指南:        -----类型推论  -----联合类型 类型推论 第一篇中我们看了TS的基本使用和基本数据类型的使用,知道了变量在使用的时候都得加一个类型,那我们可不可以不加呢,这个嘛,可以也不可以,为啥这木说呢,各位看官我们上眼瞧一下. 首先我们要来先了解一个概念,类型推论:如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型 例子一: let myFavoriteNumber = 'seven'; myFavo