第六章共用体和枚举类型
- 格式:ppt
- 大小:181.50 KB
- 文档页数:16
c语言枚共用体用法什么是C语言中的枚举和共用体?在C语言中,枚举和共用体是两个非常重要的概念。
它们都是C语言提供的特殊数据类型,可以帮助我们更好地组织和管理数据。
本文将从中括号为主题,一步一步回答关于C语言中枚举和共用体的用法和应用。
1. 了解枚举类型枚举类型是一种用户自定义的数据类型,用于表示一组相关的常量。
C语言中的枚举类型用关键字enum来定义,通常使用在需要定义一些固定取值的情况下。
下面是一个简单的枚举类型的例子:enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};在上述例子中,我们定义了一个枚举类型Weekday,它包含了一组表示星期的常量。
这些常量的值默认从0开始自动递增,也可以通过赋值指定具体的值。
例如,我们可以通过以下方式来指定星期的值:enum Weekday {Monday = 1,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};在上述例子中,Monday的值被指定为1,后续的常量依次递增。
2. 枚举类型的用法和应用枚举类型在实际编程中有很多应用场景。
例如,在处理条件语句时,我们可以使用枚举类型来增加代码的可读性。
下面是一个使用枚举类型的例子:enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};void printDay(enum Weekday day) {switch(day) {case Monday:printf("T oday is Monday.\n");break;case Tuesday:printf("T oday is Tuesday.\n");break;case Wednesday:printf("T oday is Wednesday.\n");break;case Thursday:printf("T oday is Thursday.\n");break;case Friday:printf("T oday is Friday.\n");break;case Saturday:printf("T oday is Saturday.\n");break;case Sunday:printf("T oday is Sunday.\n");break;default:printf("Invalid day.\n");break;}}在上述例子中,我们定义了一个printDay函数,用于打印传入的枚举类型变量所代表的星期。
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结构体是具有单一名字的相关元素的集合,而且这些元素可能是不同类型。
一、typedef声明新的类型名结构体类型名较长、有些类型名不直观或不习惯、不喜欢?可不可以重命名呢?用typedef声明新的类型名来代替已有的类型名例如:1)typedef float single;2) typedef struct STU SD;则“float x,y;”与“single x,y;”等价;“p=(struct STU*)malloc(sizeof(struct STU));”与“p=( SD *)malloc(sizeof(SD));”等价。
二、共用体1、共用体类型的定义当若干变量每次只使用其中之一时,可以采用“共用体”数据结构。
共用体数据中各成员存放到同一段内存单元,设置这种数据类型的主要目的就是节省内存。
共用体类型需要用户自己定义,然后才能用之来定义相应类型的变量、数组、指针等。
定义共用体类型的格式为:union 共用体类型名{ 数据类型1 成员名1;数据类型2 成员名2;……数据类型n 成员名n;};【注意】在右花括号}的后面有一个语句结束符“分号”。
2、共用体变量、数组的定义有三种方法可以定义共用体变量、数组:先定义共用体类型,然后定义变量、数组;同时定义共用体类型和变量、数组;定义无名称的共用体类型的同时定义变量、数组。
例如:①union GYT{char a[2];int b;};GYT x ,y[5];②union GYT{ char a[2];int b;}x ,y[5];③union{ char a[2];int b;}x ,y[5];上述三种方法完全等价。
【注意】(1)共用体变量所占内存单元数目等于占用单元数目最多的那个成员的单元数目。
(2)共用体变量各成员占据相同的起始地址,每一瞬时只有一个成员起作用,成员的引用方式是:共用体变量名.成员名。
例如,有如下定义和赋值:union GYT{ char a[2];int b;}x;x.a[0]= '\x41'; x.a[1]= '\x22';其中字符'\x41'的ASCII码值为41H,二进制值为1000001B;字符'\x21'的ASCII码值为22H,二进制值为100010B。