枚举、联合

枚举enum、联合union成员共用一个变量缓冲区

enum是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型

有些变量的取值被限定在一个有限的范围内

枚举值是常量不是变量,不能再对它赋值

0,1,2,3,4 …

enum weekday{sun,mon,tue,wed,thu,fri,sat};

weekday a, b;

enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b;

enum {sun,mon,tue,wed,thu,fri,sat}a,b;

只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如一定要把数值赋予枚举变量,则必须用强制类型转换

a=(enum weekday)2;    a = (weekday)2;

即 a=tue;

inline week operator++( week &rs, int ) {   //重载后++    a++时还需判断是否超出范围

week oldWeek = rs;

rs = (week)(rs + 1);

return oldWeek;

}

union  所有成员共用一个空间,并且同一时间只能储存其中一个成员变量的值

union foo

{

int I;

char c;

double k;

}

union foo bar;   8个字节

{char s[10]; int a;  }   10、 4   所以占12个字节

union的成员不可以为静态、引用,如果是自定型态的话,该自订型态成员不可以有建构函式、解构函式或是复制指定运算子。

对一个成员赋值,其他成员的值就不存在了。

时间: 2024-08-02 18:06:49

枚举、联合的相关文章

C 碎片八 结构体&枚举&联合

一.结构体 1, 结构体定义 结构体类型的定义:任意数据类型变量的集合,用于描述一个具体的事物的信息.在C语言中描述一件事物一般都是用结构体 声明结构体类型的格式: struct  结构体名 {成员列表}: 一般形式: //结构体定义一般形式 struct 结构体名 { 成员变量1; //成员变量后面是';' 成员变量2; .... }; //这里最后加';' 不能省略 例: struct Student { char name[30]; int age; double score; }; 说明

【转】Header Only Library的介绍

什么是Header Only Library Header Only Library把一个库的内容完全写在头文件中,不带任何cpp文件. 这是一个巧合,决不是C++的原始设计. 第一次这么做估计是STL.在80年代末C++编译器还不支持模块分离(现在也不支持,以后估计也不会支持了), STL的作者不得不把模板的实现写在头文件中, 使得一个STL库的实现绝大部分都展示给了使用者. 第一次广泛被接受估计还是在Boost库,它不只提出使用hpp做为Header Only Library的文件后缀(因为

Android应用开发工程师职业学习路线

描述 一个出色的Android开发工程师应该掌握哪些必要技能呢?我想应该掌握如下几个方面: 1. 语言基础,语言基础应该掌握C语言开发和Java语言开发,有人会问学习Android开发还要学习C语言吗?是这样的.Android底层是由C语言和C++来实现并运行Linux平台上,上层应用才是Java语言实现的,我们经常通过Java JNI的方式来调用C和C++,如果不会C语言就不知道如何使用JNI,如何调用底层C和C++实现 2. Android 基本组件及编程思想,虽然Android应用由Jav

自定义类型的学习总结

在C语言中,自定义类型是一种应用非常广泛的,典型的以结构体为例,比如你要描述一个学生,这个学生具有:姓名+年龄+性别+学号 这么几项特征,而通常我们有可能要把学生来包装成一个类型,这样就可以重复性的用这个类型来定义出不同的每个学生.而结构体的出现就可以使得C语言具有了这样能描述复杂类型的能力. 一般的自定义类型我们主要学习这么几种:结构体,枚举,联合体 知识点: >结构体类型创建 >结构体初始化 >结构体内存对齐 >位段,位段计算机大小. >枚举+联合.  首先是看看结构体,

HDU 5371 (2015多校联合训练赛第七场1003)Hotaru's problem(manacher+二分/枚举)

HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分相同,第一部分与第二部分对称. 现在给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度. 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法,求出以第i个点为中心的回文串长度,记录到数组p中 要满足题目所要求的内容,需要使得两个相邻的回文串,共享中间的一部分,也就是说,左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也是一样. 因为我们已经记录下来以

HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&amp;#39;s problem(manacher+二分/枚举)

pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度. 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法.求出以第i个点为中心的回文串长度.记录到数组p中 要满足题目所要求的内容.须要使得两个相邻的回文串,共享中间的一部分,也就是说.左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也

C语言学习015:联合(union)与枚举(enum)

联合 联合和结构的区别是,结构会为每个字段申请一片内存空间,而联合只是申请了一片内存空间然后所有字段都会保存到这片空间中,这片空间的大小由字段中最长的决定,下面我们就开始定义一个联合 1 //联合的定义 2 typedef union{ 3 short count; 4 float weight; 5 float volume; 6 } quantity; 联合的使用 我们可以通过很多的方式为联合赋值 1 typedef struct{ 2 const char* color; 3 quanti

【C语言总结】结构体、联合、枚举

结构:具有不能类型值的一个集合 联合:和结构类似,但是共享一个存储空间(每次只能存储一个成员) 枚举:是一种整形类型 结构体 结构体的声明 结构标记声明 struct part { int number; char name[256]; }; struct part part1://不能去掉struct //也可以像下面的方式声明变量 struct part { int number; char name[256]; }part1, part2; 使用结构类型的定义 //声明part类型的结构体

C语言基础知识----联合 &amp;&amp; 枚举 &amp;&amp; 结构体

结构体 struct 结构体标签(可选) { 类型1 标识符1: 类型2 标识符2: ....... }(变量定义可选); 联合 union 可选的标签 { 类型1 标识符1: 类型2 标识符2: ........ }可选的变量定义: 联合与结构体相似,但内存布局上存在关键性的区别.结构体中每个成员顺序存储:而在联合中,所有的成员都是从偏移量为零处开始存储(位置是重叠的),并且在某一时刻,只有一个成员真正存储于改地址. 枚举(它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为