typedef enum和enum详细用法(C语言笔记(五)----struct,enum,typedef等)

:暂无数据 2026-05-04 20:40:02 0
想高效掌握typedef enum和enum详细用法的核心吗?本文将为你聚焦C语言笔记(五)----struct,enum,typedef等这一关键环节,帮你节省大量摸索时间。

本文目录

C语言笔记(五)----struct,enum,typedef等

成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。
对每个成员也必须做类型声明。
其形式为:
类型声明符 成员名;

例如:

注意, 最后括号外面的;分号是不可少的
结构定义之后,才可以进行变量声明。
凡声明为结构 stu 的变量都由上述4个成员组成。
由此可见,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。

声明结构变量 有以下三种方法。

使用上面定义的stu为例:

如:

也可以用宏定义使一个符号常量来表示一个结构类型。例如:

例如:

这种形式的声明的一般形式为:

例如:

这种声明的一般形式为:

第三种方法与第二种方法的区别在于第三种方法中省去了结构名,而直接给出结构变量。

在程序中使用结构变量时,往往不把她作为一个整体来使用。
在ANSI C中除了允许有相同类型的结构变量相互赋值以外,一般对结构变量的使用,包括 赋值、输入、输出、运算 等都是通过结构变量的成员来实现的。
表示结构变量成员的一般形式为:
结构变量名.成员名

例如: ***** boy2.***

如果成员本身又是一个结构,则必须逐级找到最低级的成员才能使用。如: *****

结构变量的赋值就是给各成员赋值。

数组的元素也可以是结构类型的。
因此可以构成结构型数组。

初始化赋值:

当然也可以在定义 stu结构 时同时声明 pstu。
赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。
如果 boy 是被声明为 stu类型 的结构变量。
则:

有了结构指针变量,就能更方便地访问结构变量的各个成员。
其访问的一般形式为:
(*结构指针变量).成员名

结构指针变量-》成员名
例如: (*pstu).num 或 pstu-》num

例如:

介绍数组的时候,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。
C语言中不允许动态数组类型。
例如:

但是又有此需求,为了解决这个问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

常用的内存管理函数有3个:

例子:分配一块区域,输入一个学生数据

上面的例子采用了动态分配的办法为一个结构分配内存空间。
每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个节点。
有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个节点。
当然用结构数组也可以完成上述工作,但如果预先不能准确把握学生人数,也就无法确定数组大小。
而且当学生留级、退学之后也不能把该元素占用的空间从数组中释放出来。
用动态存储的方法可以很好地解决这些问题。
有一个学生就分配一个节点,无须预先确定学生的准确人数,某学生退学,可删去该节点,并释放该节点占用的存储空间,从而节约了宝贵的内存资源。
另一方面,用数组的方法必须占用一块连续的内存区域。
而使用动态分配时,每个节点之间可以是不连续的(节点内是连续的)。
节点之间的关系可以用指针实现。
即在节点结构中定义一个成员项来存放下一节点的首地址,这个用于存放地址的成员,常把他称为指针域。
可在第一个节点的指针域内 存入第二个节点的首地址,在第二个节点的指针域内 又存入第三个节点的首地址,如此串联下去直到最后一个节点。
最后一个节点因无后续节点连接,其指针域可赋值 0
这种连接方式,在数据结构中称为“链表”。

链表的基本操作主要有以下几种:

例子:建立一个三个节点的链表,存放学生数据。为简单起见,我们假定学生数据结构中只有学号和年龄两项。可编写一个建立链表的函数create。程序如下:

create函数 用于建立一个有 n个节点 的链表,他是一个指针函数,他返回的指针指向 stu结构。
在create函数内定义了三个 stu结构 的指针变量。
head为头指针,pf为指向两相邻节点的前一节点的指针变量。
pb为后一节点的指针变量。

枚举是一种 基本数据类型 ,而不是一种 构造类型 ,因为他不能再分解为任何基本类型。

enum 枚举名{ 枚举值表 };

例如: enum weekday { sun,mou,tue,wed,thu,fri,sat };

enum weeakday a,b,c;
或者为:
enum weekday { sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者为:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;

例子:

说明:
只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:
a=sun;b=mon; 是正确的
a=0;b=1; 是错误的。

如果一定要把数值赋予枚举变量,则必须使用强制类型转换。
如: a=(enum weekday)2;

还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。
例子:

typedef定义的一般形式为:
typedef 原类型名 新类型名
其中原类型名中含有定义部分,新类型名一般用大写表示,一般用大写表示,以便于区别。
有时也可用 宏定义 来代替 typedef 功能,但是 宏定义 是由 预处理 完成的,而 typedef 则是 在编译时 完成的,后者更为灵活方便。

使用 typedef 定义数组、指针、结构等类型将带来很大的方便,不仅使书写简单而且使意义更加明确,因而增强了可读性。
例如:

又如:

枚举类型怎么输出

enum weekday{sun,mon,tue,wed,thu,fri,sat};
void main()
{
enum weekday day;
day=sun;
printf("%d\n",day);
}
其值就是int

c语言中,什么是枚举类型(enum),给个例子

typedef enum
{
TEST_ENUM_ZERO,
TEST_ENUM_FRIST,
TEST_ENUM_END
}TEST_ENUM;
TEST_ENUM test;
test就是一个枚举类型的变量,其值可以是TEST_ENUM_ZERO,TEST_ENUM_FRIST,TEST_ENUM_END中的一个,TEST_ENUM_ZERO其实就是0,TEST_ENUM_FRIST就是1,以此类推

C语言各类符号意义以及用法

auto :声明自动变量   
short :声明短整型变量或函数   
int: 声明整型变量或函数   
long :声明长整型变量或函数   
float:声明浮点型变量或函数   
double :声明双精度变量或函数   
char :声明字符型变量或函数   
struct:声明结构体变量或函数   
union:声明共用数据类型   
enum :声明枚举类型   
typedef:用以给数据类型取别名   
c***t :声明只读变量   
unsigned:声明无符号类型变量或函数   
signed:声明有符号类型变量或函数   
extern:声明变量是在其他文件中声明   
register:声明寄存器变量   
static :声明静态变量   
volatile:说明变量在程序执行中可被隐含地改变   
void :声明函数无返回值或无参数,声明无类型指针   
if:条件语句   else :条件语句否定分支(与 if 连用)   
switch :用于开关语句   case:开关语句分支   
for:一种循环语句   
do :循环语句的循环体   while :循环语句的循环条件   
goto:无条件跳转语句   
continue:结束当前循环,开始下一轮循环   
break:跳出当前循环   
default:开关语句中的“其他”分支   
sizeof:计算数据类型长度   
return :子程序返回语句(可以带参数,也可不带参数)循环条件

如何 声明枚举变量

直接用enum声明:
enum {TRUE,FALSE} env;
env=TRUE;
或者用typedef自定义类型:
typedef enum{TRUE,FALSE} Boolean;
Boolean env;
env=FALSE;

枚举类型 typedef enum{.}; enum{.}; 这两个的区别

应该是
typedef enum{....} a;

enum{....} a;

前面一个是将enum{....} 定义成一个a类型,声明变量的时候可以用a b;可以理解为类似int i;
后面一个是将enum{....} 声明了一个变量a

C语言怎样取得枚举型的名字 而不是值

在C语言中,枚举类型是被当做int或者unsigned int类型来处理的,所以按照C语言规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,可以实现有条件的遍历。
1 枚举类型必须连续。
由于枚举类型支持如下方式定义:
enum
{
ENUM_0,
ENUM_10 = 10,
ENUM_11
};
这样就会导致枚举类型不连续,这种枚举无法遍历。
2 枚举类型中人为加入起始及结束标记。
enum
{
ENUM_START,
ENUM_0,
ENUM_1,
ENUM_2,
ENUM_END
};
可以看到,在这个枚举类型中,人为加入可ENUM_START, 和ENUM_END。中间的ENUM_0,ENUM_1,ENUM_2才是实际的有效数据。当后续需要增删枚举元素时,也要保证ENUM_START, 和ENUM_END分别为最小和最大值。
满足以上两种条件下,就可以做枚举的遍历了,参考代码如下:
int i;
for(i = ENUM_START+1; i《ENUM_END; i ++)
{
//使用枚举元素。
}
这个循环中,i的值就是所有有效的枚举元素值。

C语言中,定义一个布尔型变量如何用,为什么我用bool定义会报错

C语言中并没有bool类型变量。这是C++中新增的系统类型。
要在C语言中使用bool类型,可以使用自定义的方式。
1 使用整型做bool类型。
typedef int bool;

typedef unsigned char bool;
只要是整型,都可以当做bool使用。
2 使用枚举类型做bool类型。
typedef enum
{
false,
true
}bool;
实际应用中,枚举类型较为普遍。

C语言的枚举类型知识

  导语:定义一个变量是枚举类型,可以先定义一个枚举类型名,然后再说明这个变量是该枚举类型。下面是C语言的枚举类型知识,欢迎阅读:

  在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。在 C 语言中对这样取值比较特殊的变量可以定义为枚举类型。所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。

  例如:

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

  定义了一个枚举类型名 enum weekday,然后定义变量为该枚举类型。例如:

  enum weekday day;

  当然,也可以直接定义枚举类型变量。例如:

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

  其中,sum,mon,…,sat 等称为枚举元素或枚举常量,它们是用户定义的标识符。

  需要说明的有以下几点。

  ① 枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。

  ② 枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为,1,2,…。

  在上面的说明中,sun 的值为 0,mon 的值为 1,…sat 的.值为 6,如果有赋值语句

  day=mon;

  则 day 变量的值为 1。当然,这个变量值是可以输出的。例如:

  printf ("%d",day);

  将输出整数 1。

  如果在定义枚举类型时指定元素的值,也可以改变枚举元素的值。例如:

  enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}day;

  这时,sun 为 7,mon 为 1,以后元素顺次加 1,所以 sat 就是 6 了。

  ③ 枚举值可以用来作判断。例如:

  if (day==mon) {…}

  if (day》mon) {…}

  枚举值的比较规则是:按其在说明时的顺序号比较,如果说明时没有人为指定,则第一个枚举元素的值认作 0。例如,mon》sun,sat》fri。

  C 语言教程 ?216?

  ④ 一个整数不能直接赋给一个枚举变量,必须强制进行类型转换才能赋值。例如:

  day=(enum weekday)2;

  这个赋值的意思是,将顺序号为 2 的枚举元素赋给 day,相当于workday=tue;

  【例 ****】从键盘输入一个整数,显示与该整数对应的枚举常量的英文名称。

  # include

  void main( )

  {

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

  int k;

  printf("input a number(0--6)");

  scanf("%d",&k);

  day=(enum weekday)k;

  switch(day)

  {

  case sun: printf("sunday/n");break;

  case mon: printf("monday/n");break;

  case tue: printf("tuesday/n");break;

  case wed: printf("wednesday/n");break;

  case thu: printf("thursday/n");break;

  case fri: printf("friday/n");break;

  case sat: printf("satday/n");break;

  default: printf("input error/n");break;

  }

  }

  程序运行结果为:

  input a number(0--6)1

  monday

  在该程序中,枚举常量与枚举变量可以进行比较,但要输出枚举常量对应的英文单词,不能使用以下语句:

  printf(" %s",mon);

  因为枚举常量 mon 为整数值,而非字符串。

  在使用枚举变量时,主要关心的不是它的值的大小,而是其表示的状态。

  注:以下全部代码的执行环境为VC++ ***

  在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:

  #define MON 1

  #define TUE 2

  #define WED 3

  #define THU 4

  #define FRI 5

  #define SAT 6

  #define SUN 7

  在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。

  1. 定义一种新的数据类型 - 枚举型

  以下代码定义了这种新的数据类型 - 枚举型

  enum DAY

  {

  MON=1, TUE, WED, THU, FRI, SAT, SUN

  };

  (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

  (2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。

  (3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。

  (4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。

  (5) 枚举型是预处理指令#define的替代。

  (6) 类型定义以分号;结束。

  2. 使用枚举类型对变量进行声明

  新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float, 双精度浮点型double, 字符型char, 短整型short等等。用这些基本数据类型声明变量通常是这样:

  char a; //变量a的类型均为字符型char

  char letter;

  int x,

  y,

  z; //变量x,y和z的类型均为整型int

  int number;

  double m, n;

  double result; //变量result的类型为双精度浮点型double

  既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。

   方法一:枚举类型的定义和变量的声明分开

  enum DAY

  {

  MON=1, TUE, WED, THU, FRI, SAT, SUN

  };

  enum DAY yesterday;

  enum DAY today;

  enum DAY tomorrow; //变量 tomorrow的类型为枚举型enum DAY

  enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY

   方法二:类型定义与变量声明同时进行:

  enum //跟第一个定义不同的是,此处的标号DAY省略,这是允许的。

  {

  saturday,

  sunday = 0,

  monday,

  tuesday,

  wednesday,

  thursday,

  friday

  } workday; //变量workday的类型为枚举型enum DAY

  enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum week

  enum BOOLEAN { false, true } end_flag, match_flag; //定义枚举类型并声明了两个枚举型变量

   方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:

  typedef enum workday

  {

  saturday,

  sunday = 0,

  monday,

  tuesday,

  wednesday,

  thursday,

  friday

  } workday; //此处的workday为枚举型enum workday的别名

  workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday

  enum workday中的workday可以省略:

  typedef enum

  {

  saturday,

  sunday = 0,

  monday,

  tuesday,

  wednesday,

  thursday,

  friday

  } workday; //此处的workday为枚举型enum workday的别名

  workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即 enum workday。


随着发展,C语言笔记(五)----struct,enum,typedef等typedef enum和enum详细用法中的地位愈发凸显。提前理解它,就是提前布局未来。
本文编辑:admin

更多文章:


apoe基因多态性(APOE基因检测报告)

apoe基因多态性(APOE基因检测报告)

大家好,今天小编来为大家解答以下的问题,关于apoe基因多态性,APOE基因检测报告这个很多人还不知道,现在让我们一起来看看吧!

2026年5月4日 22:20

黑马linux运维就业班(黑马程序员的linux运维高级培训学习多长时间啊)

黑马linux运维就业班(黑马程序员的linux运维高级培训学习多长时间啊)

承接之前对黑马linux运维就业班的讨论,本篇我们将视角下沉,专门来聊聊实操中无法回避的黑马程序员的linux运维高级培训学习多长时间啊问题,让知识落地。

2026年5月4日 22:00

数据库工程师岗位要求(数据库开发工程师的技能要求有哪些)

数据库工程师岗位要求(数据库开发工程师的技能要求有哪些)

本篇关于数据库工程师岗位要求的讲解,将摒弃陈词滥调,直击数据库开发工程师的技能要求有哪些这一实战要害,给你可即刻应用的策略。

2026年5月4日 21:40

计算机二级python好过吗(计算机二级python考试难吗)

计算机二级python好过吗(计算机二级python考试难吗)

前几天,一位朋友问我:计算机二级python好过吗到底该怎么学?我只回了他三个字:抓住计算机二级python考试难吗。今天就来详细说说为什么。

2026年5月4日 21:20

today()函数的使用方法(Excel中today函数的使用方法及日期计算应用)

today()函数的使用方法(Excel中today函数的使用方法及日期计算应用)

本文是您理解today()函数的使用方法的最后一站。我们将通过剖析Excel中today函数的使用方法及日期计算应用,帮你打通任督二脉,彻底领悟。

2026年5月4日 21:00

typedef enum和enum详细用法(C语言笔记(五)----struct,enum,typedef等)

typedef enum和enum详细用法(C语言笔记(五)----struct,enum,typedef等)

想高效掌握typedef enum和enum详细用法的核心吗?本文将为你聚焦C语言笔记(五)----struct,enum,typedef等这一关键环节,帮你节省大量摸索时间。

2026年5月4日 20:40

spill over into(急死了!!英文好的请进来帮帮忙啊)

spill over into(急死了!!英文好的请进来帮帮忙啊)

各位老铁们好,相信很多人对spill over into都不是特别的了解,因此呢,今天就来为大家分享下关于spill over into以及急死了!!英文好的请进来帮帮忙啊的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年5月4日 20:20

学做网站论坛(怎样才能做网站)

学做网站论坛(怎样才能做网站)

各位朋友,关于学做网站论坛的讨论一直很多,今天咱们不聊复杂的,就聚焦于怎样才能做网站,用最直白的方式把它讲清楚。

2026年5月4日 20:00

多层json的解析(如何用Python解析多层嵌套的JSON)

多层json的解析(如何用Python解析多层嵌套的JSON)

想快速搞懂多层json的解析吗?本文将围绕如何用Python解析多层嵌套的JSON等核心问题,用最直白的语言为您提供一份实用指南,帮您节省大量摸索的时间。

2026年5月4日 19:40

css链接样式有几种(CSS设置链接的样式)

css链接样式有几种(CSS设置链接的样式)

曾几何时,我也觉得css链接样式有几种高不可攀,尤其CSS设置链接的样式更是一头雾水。后来才发现,只是没找对方法,希望我的经验能帮到你。

2026年5月4日 19:20

最近更新

apoe基因多态性(APOE基因检测报告)
2026-05-04 22:20:02 浏览:0
学做网站论坛(怎样才能做网站)
2026-05-04 20:00:01 浏览:0
热门文章

split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
mysql insert into字段顺序问题(mysql insert into的问题)
2026-04-13 16:00:02 浏览:1
标签列表