【C语言复习(三)】enum、typedef 和#define的分析与区别

本文探讨了C语言中的enum关键字,详细解释了枚举类型的特性和用法,以及它与#define定义的常量的区别。枚举类型提供了一种安全的方式来定义整数常量,而#define只是简单的文本替换,没有类型检查。此外,文章还讨论了typedef的作用,它是对已存在类型的别名定义,与#define的主要区别在于typedef保留了类型信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、enum

enum关键字用来定义一种自定义类型,称之为枚举类型,它的值会在定义时一一列举出来,用它定义的变量只限于列举出来的值的范围内;

例如:

enum Color
{
    red,yellow,blue,white,black
};

花括号中的值成为枚举元素或枚举常量,枚举类型的枚举元素在C中被当作常量处理,不能对其赋值,每一个枚举元素都代表一个整数,不能为浮点数等等,默认依次为0,1,2,3.....

这个数值只能在定义时显式的指定,以后不能更改,被指定的枚举元素的后面的元素的值依次等于前一个元素的值加1;

枚举元素是真正意义上的常量,我们是不能够通过取地址符拿到它的地址;

一个枚举类型的枚举元素可以直接使用,也可以定义枚举变量赋值后再使用;

例如:

#include <stdio.h>
 
enum Color
{
    red,yellow,blue=7,white,black
};
int main()
{
    enum Color cc;
    cc=blue;
    printf("直接使用枚举元素:%d\n",white);
    printf("定义枚举变量赋值后使用:%d\n",cc);
    return 0;
}

枚举类型和#define的区别

  •   #define通常用来定义宏常量,也称为宏定义,它只是简单的进行值替换,枚举常量才是真正意义上的常量;
  • #define宏常量无法被调试,枚举常量可以;
  • #define宏常量无类型信息,枚举常量是一种特定类型的常量;

 

 

2、typedef

  typedef 具体的意义是什么??

它用于给一个已存在的类型定义别名,也可说重命名;这一过程并没有产生新的类型,它重定义的类型不能进行unsigned和signed扩展;

typedef 和 #define 的区别:

  • typedef 是给已有类型取别名;
  • #define 是简单的字符串替换,没有别名的概念;

具体看如下代码:

typedef char*  PCHAR;
PCHAR p1,p2;

#define PCHAR char*;
PCHAR p3,p4;

以上的p1,p2,p3,p4有不同么?

实际上是有不同的,第一个实际上等价于

char* p1,char* p2;

而第二个实际上等价于:

char* p3,p4;

这时候,p3属于char*型变量,而p4是char型变量!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值