C语言共用体、枚举、typedef

合集下载

二、C语言数据类型和运算符号

二、C语言数据类型和运算符号
19/25 19/25
意义: 意义:可提高执行效率.
4, 3
基本运算符使用注意事项
算术运算符和算术表达式 注意以下几点: ⑴ 两个整数相除结果为整数,如5/3的结果为1.如果参加 两个整数相除结果为整数,如5/3的结果为1 运算的两个数中有一个数为实数,则结果是double型. 运算的两个数中有一个数为实数,则结果是double型. ⑵ 模运算符%,又称求余运算符,要求%两侧均为整型数据, 模运算符%,又称求余运算符,要求% 如7%4的值为3;而且余数的值符号与被除数一致,如- 7%4的值为3 7%- 的值为-3 7%-4的值为-3. ⑶ 运算符"+ +"是操作数加1,而"--"是操作数减1, 运算符" +"是操作数加1,而"--"是操作数减1 只适用于变量,不能用于常量或表达式.
21/25 21/25
举例:写出下列表达式的值 若有定义:int a=3, b=2, c=1; char ch1='a'; 1) b+c!=a 2) ch1<'b' 3) a%2==0 4) (a>b)>(b<c) 5) a>b>b<1 6) a>b==c 7) f=a>b>c
22/25 22/25
基本运算符使用注意事项
基本算术运算符: + 加 / 取正 (双目运算符 / 单目运算符) - 减 / 取负 (双目运算符 / 单目运算符) * 乘 (双目运算符) / 除 (双目运算符) % 整除取余 (双目运算符) 注意: 1)两整数相除结果仍为整数 如:5/2 2 -5/3 -1 1/2 0 要依实际应用情况加以利用或避免. 2)求余运算要求两运算元素均为整型,余数仍 为整型; 如:int a, b; a=11%3; /*2 a*/ b=5%a; /*1 b*/ 若有: a=11.0%3; 编译时将视为语法错.

C语言typedef详解

C语言typedef详解

C语⾔typedef详解允许⽤户使⽤ typedef 关键字来定义⾃⼰习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与⽤户⾃定义的结构型名称、共⽤型名称、枚举型名称等。

⼀旦⽤户在程序中定义了⾃⼰的数据类型名称,就可以在该程序中⽤⾃⼰的数据类型名称来定义变量的类型、数组的类型、指针变量的类型与函数的类型等。

例如,C 语⾔在 C99 之前并未提供布尔类型,但我们可以使⽤ typedef 关键字来定义⼀个简单的布尔类型,如下⾯的代码所⽰:1. typedef int BOOL;2. #define TRUE 13. #define FALSE 0定义好之后,就可以像使⽤基本类型数据⼀样使⽤它了,如下⾯的代码所⽰:1. BOOL bflag=TRUE;typedef的4种⽤法在实际使⽤中,typedef 的应⽤主要有如下4种。

1) 为基本数据类型定义新的类型名也就是说,系统默认的所有基本类型都可以利⽤ typedef 关键字来重新定义类型名,⽰例代码如下所⽰:1. typedef unsigned int COUNT;⽽且,我们还可以使⽤这种⽅法来定义与平台⽆关的类型。

⽐如,要定义⼀个叫 REAL 的浮点类型,在⽬标平台⼀上,让它表⽰最⾼精度的类型,即:1. typedef long double REAL;在不⽀持 long double 的平台⼆上,改为:1. typedef double REAL;甚⾄还可以在连 double 都不⽀持的平台三上,改为:1. typedef float REAL;这样,当跨平台移植程序时,我们只需要修改⼀下 typedef 的定义即可,⽽不⽤对其他源代码做任何修改。

其实,标准库中⼴泛地使⽤了这个技巧,⽐如 size_t 在 V2010 的 crtdefs.h ⽂件中的定义如下所⽰:1. #ifndef _SIZE_T_DEFINED2. #ifdef _WIN643. typedef unsigned __int64 size_t;4. #else5. typedef _W64 unsigned int size_t;6. #endif7. #define _SIZE_T_DEFINED8. #endif2) 为⾃定义数据类型(结构体、共⽤体和枚举类型)定义简洁的类型名称以结构体为例,下⾯我们定义⼀个名为 Point 的结构体:1. struct Point2. {3. double x;4. double y;5. double z;6. };在调⽤这个结构体时,我们必须像下⾯的代码这样来调⽤这个结构体:1. struct Point oPoint1={100,100,0};2. struct Point oPoint2;在这⾥,结构体 struct Point 为新的数据类型,在定义变量的时候均要向上⾯的调⽤⽅法⼀样有保留字 struct,⽽不能像 int 和 double 那样直接使⽤ Point 来定义变量。

c语言typedef语法格式

c语言typedef语法格式

C语言typedef语法格式1. 介绍C语言是一种广泛应用的编程语言,它具有强大的功能和灵活的语法结构。

在C语言中,typedef是一种非常重要的关键字,它可以用来为已有的数据类型定义一个新的名字,这样可以增加代码的可读性和易用性。

本文将对C语言typedef的语法格式进行详细介绍,帮助读者更好地理解并应用typedef关键字。

2. typedef的基本语法在C语言中,使用typedef关键字可以为已有的数据类型定义一个新的名字。

其基本语法格式如下:```ctypedef 已有的数据类型新的数据类型名;```其中,已有的数据类型可以是基本的数据类型,也可以是自定义的结构体、共用体或枚举类型。

新的数据类型名可以是任何合法的标识符,用来代表已有数据类型的别名。

3. typedef关键字的作用通过使用typedef关键字,可以为已有的数据类型定义一个新的名字,这样可以使代码更加清晰易懂。

typedef还可以简化复杂数据类型的声明,提高代码的可维护性和可读性。

typedef还可以帮助程序员更好地进行数据类型的抽象和封装,使代码更加模块化和独立。

4. typedef与数据类型的关系在C语言中,typedef关键字和已有的数据类型之间存在着紧密的关系。

通过typedef,可以为已有的数据类型定义一个新的名字,从而使得程序中可以使用这个新的名字来表示已有的数据类型。

这样可以提高代码的可读性和易用性,减少相同数据类型的重复声明,使代码更加简洁和清晰。

5. typedef的使用方法在C语言中,使用typedef关键字可以有多种不同的方法。

可以使用typedef来定义结构体的新名字,以及为指针类型定义新名字。

下面分别介绍这两种常见的使用方法:5.1 定义结构体的新名字结构体是C语言中一种重要的数据类型,它可以用来表示复杂的数据结构。

通过使用typedef,可以为结构体定义一个新的名字,从而简化结构体的声明和使用。

其基本语法格式如下:```ctypedef struct 原结构体名新结构体名;```通过这种方式,就可以为原结构体定义一个新的名字,以便在程序中使用新的名字表示该结构体类型。

c语言 union和typedef

c语言 union和typedef

c语言 union和typedefC语言中的union和typedef是两个非常重要的概念,它们可以在编写程序时提供更多的灵活性和可读性。

本文将详细介绍union和typedef的概念、用法和示例。

一、union的概念和用法union是一种特殊的数据类型,它允许在同一个内存空间中存储不同的数据类型。

在union中,所有成员共用同一块内存空间,每个成员所占的空间取决于最大的成员。

使用union的好处是可以节省内存空间,并且可以在不同的成员之间快速切换。

1.定义union类型可以通过以下方式定义一个union类型:```union UnionName {member_type1 member_name1;member_type2 member_name2;...};```其中,UnionName是union类型的名称,member_type1和member_type2是不同成员的数据类型,member_name1和member_name2是成员变量的名称。

一个union可以有多个成员,每个成员可以是不同的数据类型。

2.使用union变量定义union变量的方式与定义其他类型的变量类似:```union UnionName variable_name;```然后可以通过点操作符来访问union变量的成员:```variable_name.member_name;```可以根据需要在不同的成员之间进行赋值和访问,但是要注意在访问前确保当前成员已经正确赋值。

3.union的大小和对齐union的大小取决于最大的成员,因为所有成员共用同一块内存空间。

在分配内存空间时,系统会根据最大成员的大小进行对齐操作,以保证每个成员的地址对齐。

二、typedef的概念和用法typedef是一种用于定义类型别名的关键字,它可以为已有的数据类型定义一个新的名称。

使用typedef可以提高代码的可读性,并且可以简化对复杂数据类型的使用。

c语言中typedef用法

c语言中typedef用法

c语言中typedef用法在C语言中,`typedef`是一个关键字,用于为已知的数据类型定义一个新的名字。

这个新名字可以让变量更具描述性,或者简化一些复杂的类型声明。

`typedef`的作用相当于为现有类型创建一个别名。

`typedef`的用法有以下几种:1. 为基本数据类型定义别名:```ctypedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;```在这个例子中,`size`、`u16`和`u8`分别是`unsigned int`、`unsigned int16`和`unsigned int8`的别名。

2. 为结构体定义别名:```ctypedef struct tagMyStruct {int iNum;long lLength;} MyStruct;```这个例子中,`MyStruct`是一个结构体的别名,该结构体包含两个成员:`int iNum`和`long lLength`。

3. 为枚举类型定义别名:```ctypedef enum {yes,no} YesNo;```在这个例子中,`YesNo`是`enum`类型的别名,包含两个枚举值:`yes`和`no`。

4. 为数组定义别名:```ctypedef uint8 MyArray[6];```这个例子中,`MyArray`是一个包含6个`uint8`类型元素的数组的别名。

总之,`typedef`在C语言中的主要用途是为现有数据类型创建别名,以便让变量更具描述性或简化类型声明。

typedef定义的新类型名与其对应的原类型名具有相同的语法和语义,但具有更清晰的含义。

C语言第9章结构体、共用体、枚举

C语言第9章结构体、共用体、枚举

结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类

c语言 union和typedef

c语言 union和typedef

c语言union和typedef摘要:1.概述2.共用体(union)a.定义b.成员变量c.存储方式d.实例3.类型定义(typedef)a.定义b.类型别名c.实例4.共用体与类型定义的区别5.总结正文:1.概述C 语言是一种广泛应用的编程语言,其具有丰富的数据类型和灵活的结构体。

在C 语言中,共用体(union)和类型定义(typedef)是两种重要的数据类型与结构方式。

本文将对这两种方式进行详细的介绍和解析。

2.共用体(union)2.1 定义共用体是一种特殊的结构体,它的成员变量共享同一块内存空间。

这意味着,在共用体中,所有成员变量的地址都是相同的。

共用体使用关键字“union”定义。

2.2 成员变量共用体的成员变量可以是不同类型的,但它们必须具有相同的大小。

成员变量的类型可以是整型、浮点型或者其他自定义类型。

2.3 存储方式共用体的成员变量在内存中的存储方式是连续的。

这意味着,如果一个共用体有两个成员变量,一个是整型,一个是浮点型,那么这两个变量在内存中是连续存储的。

2.4 实例下面是一个共用体的实例:```c#include <stdio.h>union MyUnion {int intVar;float floatVar;};int main() {union MyUnion myUnion;myUnion.intVar = 10;myUnion.floatVar = 20.5;printf("intVar: %d, floatVar: %f", myUnion.intVar, myUnion.floatVar);return 0;}```3.类型定义(typedef)3.1 定义类型定义是一种为现有类型定义新的名称的方式。

类型定义使用关键字“typedef”定义。

3.2 类型别名类型定义允许为现有类型创建一个新的名称,这个新名称被称为类型别名。

类型别名可以提高代码的可读性和简洁性。

c语言 union和typedef

c语言 union和typedef

c语言 union和typedef一、union的概念和使用在C语言中,union是一种特殊的数据类型,它允许在同一块内存空间中存储不同类型的数据。

union的定义使用关键字union,后跟定义的变量名和一对大括号,大括号中是各个成员变量的定义,每个成员变量都可以是不同的数据类型。

例如,我们可以定义一个union来表示一个图形的属性,如下所示:```union Shape {int width;int height;double radius;};```在这个例子中,我们定义了一个union类型的变量Shape,它可以存储一个图形的宽度、高度或半径。

使用union时需要注意,union的大小等于其最大成员变量的大小,因为union的各个成员变量共享同一块内存空间。

在存储一个成员变量的同时,其他成员变量的值会被改变。

二、typedef的作用和用法在C语言中,typedef用来为已有的数据类型定义一个新的名字,使代码更加清晰易读。

通过typedef,可以为复杂的数据类型或自定义的数据类型定义一个更简洁的别名。

typedef的语法格式如下:```typedef 原类型名新类型名;```例如,我们可以使用typedef为int类型定义一个别名叫做Integer,如下所示:```typedef int Integer;```这样,在代码中就可以使用Integer来代替int,使代码更加易读。

typedef还可以与结构体、枚举等一起使用,使代码更加简洁。

例如,我们可以使用typedef为一个结构体定义一个别名,如下所示:```typedef struct {int year;int month;int day;} Date;```这样,我们就可以使用Date来代替这个结构体的名称,使代码更加简洁。

三、union和typedef的结合应用在C语言中,union和typedef经常会结合在一起使用,用来定义一些特殊的数据类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、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。

占据内存情况如下(不足8位,高字节补0):
x.b
所以当执行printf("%d\n",x.b);时,输出8769,因为x.b中存放着(0010001001000001)2,十进制值为即为8769。

(3)共用体变量不能初始化,不能被整体引用,只能引用共用体变量中的成员。

三、枚举类型
枚举型变量
如果一个变量只有几种可能的值,可以定义为枚举类型。

“枚举”:将变量可能的值一一列举出来。

变量的值只能取列举出来的值之一。

1、定义形式如下:
enum 枚举型名{枚举常量标识符1, 枚举常量标识符2,……}; 注意:
①定义时枚举型名之后没有赋值号=;
②枚举常量标识符外不能添加任何符号,比如双引号等,必须
符合标识符命名规则;
③各枚举常量按定义顺序取值0、1、2、……,但在定义的同
时可以指定枚举常量的值,其后未指定的枚举常量的取值依次加1。

④枚举类型与整型是不同的数据类型,不能直接从键盘读入枚
举常量值。

2、例题
(1)有说明:enum money{Fen, Jiao, Yuan=100, Tenyuam};
每个枚举量所对应的实际值为__________。

A. 0,1,100,101
B.1,2,100,101
C. Fen, Jiao, Yuan, Tenyuam
D. Fen,Jiao,100,Tenyuam
(2)以下程序的输出结果是________。

enum week{SUN=7,MON=1,WED,TUS,FRI,SAT};
main()
{printf("%d",hour(FRI,SUN));}
hour(int x, int y)
{if(y>x)return 24*(y-x);
else return -1;
}。

相关文档
最新文档