当前位置:首页 > 自我学习 > 正文内容

枚举和常量区别(枚举常量的值可以是整数或字符串)

2023-04-06 20:48:04自我学习1

枚举常量的值可以是整数或字符串

C语言中的常量一共有4种:整数常量:integer-constant浮点常量:floating-constant枚举常量:enumeration-constant字符常量:character-constant常量是一个右值,可以把右值赋给一个左值int a = 1; 这里的1确实是常量,是一个整数常量

枚举常量的值可以是整数或字符串数吗

枚举值其实是 int,只不过编译器允许你用更加清楚的文字来代替 int。而常量跟类型没有直接关系,是指直接硬编码、不使用变量引用的数值。这两个概念没有什么直接的关系。

枚举常量的值可以是什么

1、枚举常量的定义

enum 枚举类型名{常量1,常量2,常量3,…};

例如定义一个星期的枚举常量:enum Week {Mon,Tue,Wed,…};

这就定义了一个新的数据类型:Week。

Week数据类型来源于int类型(默认)。

Week类型的数据只能有7种取值,它们是:SUNDAY,MONDAY,TUESDAY……SATURDAY。

其中SUNDAY = 0,MONDAY = 1……SATURDAY = 6。也就是说,第1个枚举值代表0,第2个枚举值代表1,这样依次递增1。

不过,也可以在定义时,直接指定某个或某些枚举值的数值。比如,对于中国人,可能对于用0表示星期日不是很好接受,不如用7来表示星期天。这样我们需要的个值就是 1,2,3,4,5,6,7。可以这样定义:

enum Week {MONDAY = 1,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY};

我们希望星期一仍然从1开始,枚举类型默认枚举值从0开始,所以我们直接指定MONDAY等于1,这样,TUESDAY就将等于2,直接到SUNDAY等于7。

枚举值,我们就称为枚举常量,因为它一经定义以后,就不可再改变,以下用法是错误的!

TUESDAY = 10; //错误!我们不能改变一个枚举值的数值。

用枚举常量来完成表达今天是星期三:

Week today = TUESDAY;

2、枚举常量和宏定义的区别与联系

宏和枚举的主要区别是作用的时间和存储形式不同。宏定义是在编译预处理阶段作用的,也就是在编译预处理时,就会进行宏替换,将程序中的所有宏名替换为所定义的常量名,而枚举则是在程序运行之后才起作用的。宏定义不分配内存空间,而枚举常量存储在数据的静态存储区中(这一点一定要注意)。宏只占用代码段的空间,而枚举除了占用代码段空间外,还耗费CPU资源。

但是不能说宏就一定比枚举好,因为你定义一大堆的宏总是非常的不方便的。

3、枚举类型与sizeof运算符

下面是我在VS2008中的程序:

#include “stdafx.h”

#include “stdio.h”

enum WEEK{Mon,Tue,Wed,Thu,Fri,San,Sun};

enum Boolean{True,fal};

int main(int argc, _TCHAR* argv[])

{undefined

char c;

WEEK today;

Boolean bol;

printf(“size of today is %d\n”,sizeof(today));

printf(“size of WEEK is %d\n”,sizeof(WEEK));

printf(“size of Boolean is %d\n”,sizeof(Boolean));

printf(“size of bol is %d\n”,sizeof(bol));

c=getchar();

return 0;

}

枚举类型中的枚举元素是常量

在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。 其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。 符号常量在使用之前必须先定义,其一般形式为: 1 #define 标识符 常量 其中#define 也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。 枚举类型中的元素也是符号常量,如: 1 enumWeekday{SUN, MON, TUES, WED, THU, FRI, SAT}。 例: 1 2 3 4 5 6 7 8 9 #include #define PRICE 30 main() {     intnum,total;     num=10;     total=num* PRICE;     printf(“total=%d”,total); } 使用符号常量的好处是:含义清楚;能做到“一改全改”

枚举类型中的每个枚举常量值都是一个

C语言指针用法灵活,基本类型指针,

通用指针 void *

指针数组和数组指针

函数指针和指针函数

结构指针和联合指针

枚举指针

指针常量和常量指针

指针的指针

基本类型指针

指向整型和浮点型的指针。包括char,int,float,double类型指针

通用指针

void * 声明一个通用指针,该指针可以和除函数指针类型之外指针类型相互转换。

例如:

void *p;

int *ip;

p = ip;

ip = p;

指针数组和数组指针

指针数组:指针数组的每个元素都是指针类型。

例如:

// ip是数组类型,数组中每个元素是int型指针。

int *ip[];

// fp是数组类型,数组中每个元素是float型指针。

float *fp[];

数组指针:指针类型,指向数组。

例如:

int a[100] ; // 声明和定义数组a

int *pa = a; // 声明指针pa,并且将数组a的首地址赋值给pa

int a1 = *(pa+1); // 获取数组a第2个元素的值,即a[1]的值

注:数组名本身就是当做地址常量赋值给指针,不需要 & 地址运算符。

函数指针和指针函数

函数指针指向特定函数类型的指针。

例如:

// fp是指针,指向 返回值为int型,有1个int型参数的一类函数

int (fp)(int);// fp是指针,指向 返回值为double型,有2个double型参数的一类函数double (fp)(double,double);

// fp是指针,指向 返回值为int型指针,有1个int型参数的一类函数

int (fp)(int);

注:指针函数是指返回值为指针类型的函数,本质上是函数类型;函数指针是指向函数类型的指针,本质上指针类型。

结构指针和联合指针

指向结构类型、联合类型的指针。

例如:

struct

枚举指针

指向枚举类型的指针。

例如:

enum

指针常量和常量指针

指针常量:指向常量的指针,指针本身是变量。

例如:

const int p = 1; // 定义常量p

const int *ptr = &p; // ptr是指针,指向const int *常量int型

int i = 2;

p = i; // 此时出错,不能给常量赋值

ptr = &i; // 正确,ptr是指针变量,可以赋值

常量指针:指向变量的指针,指针本身是常量。

例如:

int p = 1; // 定义变量p

int const ptr = &p; // ptr是指针常量,指向变量int型

int i = 2;

p = i; // 正确,p是变量

ptr = &i; // 错误,ptr是常量指针

指针的指针

C语言支持多重指针,即指向指针的指针。

例如:以下都可以输出变量i的值。

#include

输出结果:

10

枚举元素作为常量,他们是有值的

枚举是一种数据类型,它可以用来定义一组有限的常量值,这些常量值可以用来表示特定的状态或属性。枚举可以用来提高代码的可读性,并且可以防止程序员犯错误。

枚举变量的值可以是整数或字符串吗?

枚举类型,在C语言中求sizeof,可以先定义一个枚举类型,然后对枚举类型中的元素,或者对类型求size,获取到内存长。

代码如下

#include

enum TEST

{

    TEST0,

    TEST1,

    TEST2

};

int main()

{

    printf("size of TEST is %d\n", sizeof(TEST));//用类型求大小。

    printf("size of TEST is %d\n", sizeof(TEST1));//用元素求大小。

    return 0;

}对于枚举类型,区分是否有负数值,系统会按照unsigned int或int来处理,而是否带符号,并不影响int的占用空间。所以任意枚举类型或枚举变量,占用的空间都是和平台实现时的int类型相同。对于主流的32位/64位平台,枚举类型均占4字节。即sizeof结果为4。

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98766811.html