枚举类型和数组的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举类型和数组的区别?相关的知识,希望对你有一定的参考价值。

RT
老师说 枚举是--为不可分的整数值提供便于记忆的符号.什么意思呢?

枚举和另外两个是没多大关系的,枚举的使用,目的在于使程序更加好理解。
enum
exp
action_1
=
1,
action_2
=
2,
action_3
=
3,
...

这么写,只是为了让程序更加易懂,你直接在code里写1,2,3,也完全没错,计算机是无所谓的,但是看的人要蛋疼无比了。人家看到action_1,就知道这里是要这样做,其实对于计算机,那里就是1.
至于指针和数组,关系就很大了。
但是指针比数组更灵活,因为它是一个变量。数组其实也是指针,但是是一个常量指针。
比如,int
*p
arr[5];
p
=
null;
p=
0x00012345;
p
=
arr;
对于p你可以这么操作。
但是arr,你只能
arr[0],arr[1],即用里面的值,但是你不能arr
=
p,这是错的,因为数组名是一个常量指针。
参考技术A 举个例子吧,比如说
enum colorblack,white,red,blue,green;

1.计算机在处理的时候,实际上black=0,white=1,red=2,blue=3,green=4;
这些类似于#define black 0
只是用black代表了0而已。

2.为什么说不可分呢,一般情况下3=1+2,但是blue不等于white+red;所以这些代表用的符号虽然实际上是整数,但是不能像一般整数那样拆分。

3.继续:
color color1;
color1=white;
上面定义的color是一个类型名(像int、float那样是类型名),可以定义变量,color1是这种类型的一个变量,它等于white,实际上计算机处理的时候它就等于1,这是由enum color的定义决定的。本回答被提问者采纳
参考技术B 区别大了
枚举中相当于一组常量的定义,而枚举类型的变量只能在这些值中取一个,一般来说枚举类型的值是整形,但是如果要赋给一个整形变量最好经过强制转换
数组定义的是一组相同类型的变量集合

C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)

参考文章1:C与C++中的enum有什么不同?

参考文章2:为什么要用枚举以及c++11强枚举与c++98弱枚举的区别★★★★★

在C++98枚举(弱枚举)中,枚举类型是不限定作用域的(unscoped enumeration),枚举中的成员可不加命名空间限定符随意使用,但是不限定作用域的做法总是充满危险的,就上例而言,我们无法保证在当前命名空间是否不存在与ImageResolution相对应的CameraResolution枚举类型,其同样包含有成员HIGH, HIGH_2K, HIGH_4K中的一个或多个,若真的包含,很可能在不知觉中被调用者混淆——更让人难过的是,调用者可能并没有料到如此。这种场景在使用第三方库的情况下更为严重。因为传统枚举总是默认可以被隐式地转化为int类型,在不知不觉中就进行了跨作用域的类型转换。

c++11的强枚举类型enum class或enum struct是安全的!

注意:c++11枚举体的声明和定义使用 enum class或是enum struct, 二者是等价的

文章目录

C语言和C++语言都提供了枚举类型,两者是有一定区别. 我们接下来通过代码进行演示:

1. C语言中 enum

main.c

#include <stdio.h>

int main()

	enum Week  Mon, Tue, Wed, Thi, Fri, Sat, Sun ;
	enum Other  One, Two, Three ;
	enum Week week = Mon;

	// 1. 允许非枚举值赋值给枚举类型, 允许其他枚举类型的值赋值给当前枚举类型	
	week = 100; //ok	
	week = One; //ok

	// 2. 枚举值具有外层作用域,容易造成名字冲突	
	//int One = 100; //error	//错误	C2365	“One” : 重定义;以前的定义是“枚举数”

	// 3. 不同类型的枚举值可以直接比较
	if (week == One)
	
		printf("equal\\n");	//equal
	

	return 0;

其中第二种情况错误提示如下:

2. C++中 enum

main.cpp

#include <iostream>
using namespace std;

int main()

	enum Week  Mon, Tue, Wed, Thi, Fri, Sat, Sun ;
	enum Other  One, Two, Three ;
	enum Week week = Mon;	//警告	C26812	枚举类型“main::__l2::Week”未设定范围。相比于 "enum",首选 "enum class" (Enum.3)。


	// 1. C++ 只能允许赋值枚举值	
	// week = 100; //error
	// week = One; //error	

	// 2. 枚举元素会暴露在外部作用域,不同的两个枚举类型,若含有相同枚举元素,则会冲突
	//enum OtherWeek  Mon ;	//error,重定义,以前的定义是枚举数

	// 3. C++ 只允许同枚举类型值之间比较(作者说得貌似不对,能够比较!)
	enum E1  A, B ;
	enum E2  C, D ;
	cout << (E1::B == E2::D ? "相等" : "不相等") << endl; //相等

	return 0;

3. C++中的 enum class(强枚举类型)(强枚举类型禁止不同枚举类型之间进行比较)

#include <iostream>
using namespace std;

int main()

	enum class E1  A = 1, B = 2 ;
	enum class E2  A = 1, C = 2 ;

	// 1. 强枚举类型不会将枚举元素暴露在外部作用域
	cout << (int)(E1::A) << endl;	//1
	int A = 100;

	// 2. 不相关的两个枚举类型不能直接比较,编译报错
	//cout << (E1::B == E2::C ? "相等" : "不相等") << endl; //error	//E0349	没有与这些操作数匹配的 "==" 运算符
	//cout << (E1::B == 2 ? "相等" : "不相等") << endl; //error	E0349	没有与这些操作数匹配的 "==" 运算符

	return 0;

总结

  1. C 枚举类型支持不同类型枚举值之间赋值、以及数字赋值、比较,并且具有外层作用域。

  2. C++ 中枚举不允许不同类型的值给枚举类型变量赋值,但仍然支持不同类型之间枚举进行比较,枚举符号常量具有外层作用域。

  3. C++ 强枚举类型不允许不同类型之间的赋值、比较,枚举常量值并不具有外层作用域。

以上是关于枚举类型和数组的区别?的主要内容,如果未能解决你的问题,请参考以下文章

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

C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)

C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)

C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)

delphi中枚举类型和子界,数组,集合的详解以及类型说明

c#下可否将一个枚举类型的数组转换为一个整型数组