如果我说这两个人其实是总是梦见同一个人人你们信吗

下次自动登录
现在的位置:
& 综合 & 正文
Enum使用方法,为什么使用typedef enum–转载
本文转自/JCSU/articles/1299051.html
注:以下全部的执行环境为VC++ 6.0
在中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:
#define MON
1#define TUE
2#define WED
3#define THU
4#define FRI
5#define SAT
6#define SUN
在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。
1. 定义一种新的数据类型 - 枚举型
以下代码定义了这种新的数据类型 - 枚举型
MON=<span style="color:#, TUE, WED, THU, FRI, SAT, SUN
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
2. 使用枚举类型对变量进行声明
新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float, 双精度浮点型double, 字符型char, 短整型short等等。用这些基本数据类型声明变量通常是这样:
char //变量a的类型均为字符型charcharint
//变量x,y和z的类型均为整型intintdouble
m,double //变量result的类型为双精度浮点型double
既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。
方法一:枚举类型的定义和变量的声明分开
MON=<span style="color:#, TUE, WED, THU, FRI, SAT, SUN
enum DAYenum DAYenum DAY //变量tomorrow的类型为枚举型enum DAYenum DAY good_day, bad_ //变量good_day和bad_day的类型均为枚举型enum DAY
方法二:类型定义与变量声明同时进行:
enum //跟第一个定义不同的是,此处的标号DAY省略,这是允许的。{
sunday = <span style="color:#,
wednesday,
} //变量workday的类型为枚举型enum DAY
enum week { Mon=<span style="color:#, Tue, Wed, Thu, Fri Sat, Sun} //变量days的类型为枚举型enum week
enum BOOLEAN { false, true } end_flag, match_ //定义枚举类型并声明了两个枚举型变量
方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:
typedef enum workday
sunday = <span style="color:#,
wednesday,
} //此处的workday为枚举型enum workday的别名
workday today, //变量today和tomorrow的类型为枚举型workday,也即enum workday
enum workday中的workday可以省略:
typedef enum
sunday = <span style="color:#,
wednesday,
} //此处的workday为枚举型enum workday的别名
workday today, //变量today和tomorrow的类型为枚举型workday,也即enum workday
也可以用这种方式:
typedef enum workday
sunday = <span style="color:#,
wednesday,
workday today, //变量today和tomorrow的类型为枚举型workday,也即enum workday
注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常量。错误示例如下所示:
错误声明一:存在同名的枚举类型
typedef enum
wednesday,
} workday;
typedef enum WEEK
sunday = <span style="color:#,
} workday;
错误声明二:存在同名的枚举成员
typedef enum
wednesday,
} workday_1;
typedef enum WEEK
wednesday,
sunday = <span style="color:#,
} workday_2;
3. 使用枚举类型的变量
3.1 对枚举型的变量赋值。
实例将枚举类型的赋值与基本数据类型的赋值进行了对比:
方法一:先声明变量,再对变量赋值
#include&stdio.h&
/* 定义枚举类型 */enum DAY { MON=<span style="color:#, TUE, WED, THU, FRI, SAT, SUN };
void main()
/* 使用基本数据类型声明变量,然后对变量赋值 */
x = <span style="color:#;
y = <span style="color:#;
z = <span style="color:#;
/* 使用枚举类型声明变量,再对枚举型变量赋值 */
enum DAY yesterday, today,
yesterday = MON;
printf("%d %d %d \n", yesterday, today, tomorrow);
方法二:声明变量的同时赋初值
#include &stdio.h&
/* 定义枚举类型 */enum DAY { MON=<span style="color:#, TUE, WED, THU, FRI, SAT, SUN };
void main()
/* 使用基本数据类型声明变量同时对变量赋初值 */
int x=<span style="color:#, y=<span style="color:#, z=<span style="color:#;
/* 使用枚举类型声明变量同时对枚举型变量赋初值 */
enum DAY yesterday = MON,
today = TUE,
tomorrow = WED;
printf("%d %d %d \n", yesterday, today, tomorrow);
方法三:定义类型的同时声明变量,然后对变量赋值。
#include &stdio.h&
/* 定义枚举类型,同时声明该类型的三个变量,它们都为全局变量 */enum DAY { MON=<span style="color:#, TUE, WED, THU, FRI, SAT, SUN } yesterday, today,
/* 定义三个具有基本数据类型的变量,它们都为全局变量 */int x, y,
void main()
/* 对基本数据类型的变量赋值 */
x = <span style="color:#;
y = <span style="color:#;
z = <span style="color:#;
/* 对枚举型的变量赋值 */
yesterday = MON;
printf("%d %d %d \n", x, y, z); //输出:10 20 30
printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3}
方法四:类型定义,变量声明,赋初值同时进行。
#include &stdio.h&
/* 定义枚举类型,同时声明该类型的三个变量,并赋初值。它们都为全局变量 */enum DAY
MON=<span style="color:#,
yesterday = MON, today = TUE, tomorrow = WED;
/* 定义三个具有基本数据类型的变量,并赋初值。它们都为全局变量 */int x = <span style="color:#, y = <span style="color:#, z = <span style="color:#;
void main()
printf("%d %d %d \n", x, y, z); //输出:10 20 30
printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3}
3.2 对枚举型的变量赋整数值时,需要进行类型转换。
#include &stdio.h&
enum DAY { MON=<span style="color:#, TUE, WED, THU, FRI, SAT, SUN };
void main()
enum DAY yesterday, today,
yesterday = TUE;
today = (enum DAY) (yesterday + <span style="color:#); //类型转换
tomorrow = (enum DAY) <span style="color:#; //类型转换
//tomorrow = 3; //错误
printf("%d %d %d \n", yesterday, today, tomorrow); //输出:2 3 30}
3.3 使用枚举型变量
#include&stdio.h&
BACKSPACE = '\b',
enum BOOLEAN { FALSE = <span style="color:#, TRUE } match_
void main()
int index = <span style="color:#;
int count_of_letter = <span style="color:#;
int count_of_space = <span style="color:#;
char str[] = "I'm Ely efod";
match_flag = FALSE;
for(; str[index] != '\0'; index++)
if( SPACE != str[index] )
count_of_letter++;
match_flag = (enum BOOLEAN) <span style="color:#;
count_of_space++;
printf("%s %d times %c", match_flag ? "match" : "not match", count_of_space, NEWLINE);
printf("count of letters: %d %c%c", count_of_letter, NEWLINE, RETURN);
match 2 times
count of letters: 10
Press any key to continue
4. 枚举类型与sizeof运算符
#include&stdio.h&
enum escapes
BACKSPACE = '\b',
enum BOOLEAN { FALSE = <span style="color:#, TRUE } match_
void main()
printf("%d bytes \n", sizeof(enum escapes)); //<span style="color:# bytes
printf("%d bytes \n", sizeof(escapes)); //<span style="color:# bytes
printf("%d bytes \n", sizeof(enum BOOLEAN)); //<span style="color:# bytes
printf("%d bytes \n", sizeof(BOOLEAN)); //<span style="color:# bytes
printf("%d bytes \n", sizeof(match_flag)); //<span style="color:# bytes
printf("%d bytes \n", sizeof(SPACE)); //<span style="color:# bytes
printf("%d bytes \n", sizeof(NEWLINE)); //<span style="color:# bytes
printf("%d bytes \n", sizeof(FALSE)); //<span style="color:# bytes
printf("%d bytes \n", sizeof(<span style="color:#)); //<span style="color:# bytes}
5. 综合举例
#include&stdio.h&
enum Season
spring, summer=<span style="color:#0, fall=<span style="color:#, winter
typedef enum
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
void main()
/* Season */
printf("%d \n", spring); // 0
printf("%d, %c \n", summer, summer); // 100, d
printf("%d \n", fall+winter); // 193
Season mySeason=
if(winter==mySeason)
printf("mySeason is winter \n"); // mySeason is winter
int x=<span style="color:#0;
if(x==summer)
printf("x is equal to summer\n"); // x is equal to summer
printf("%d bytes\n", sizeof(spring)); // 4 bytes
/* Weekday */
printf("sizeof Weekday is: %d \n", sizeof(Weekday)); //sizeof Weekday is: 4
Weekday today = S
if(today == Monday)
tomorrow = T
tomorrow = (Weekday) (today + <span style="color:#); //remember to convert from int to Weekday}
&&&&推荐文章:
【上篇】【下篇】温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
不要因为急着赶路,让自己的步伐杂乱。远方是既定的目标,但路上才是最重要的经历!
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。1定义说明1. 枚举类型定义的一般形式为:enum 枚举名{ 枚举值表 };在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。例如:该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。2. 枚举变量的说明如同结构体(struct)和共用体(union)一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:enum weekday{sun,mon,tue,wed,thu,fri,sat};enum weekday a,b,c;//或者为:enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;//或者为:enum{sun,mon,tue,wed,thu,fri,sat}a,b,c;2内存空间enum是枚举型 union是共用体,成员共用一个变量缓冲区。3赋值和使用枚举类型在使用中有以下规定:1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,sat值为6。只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。。如一定要把数值赋予枚举变量,则必须用强制类型转换。如:a=(enumweekday)2;特别注意:在VS2010等编译器中,强制转换格式应为:(weekday)2,如果前面加上了enum,编译时会出现“类型重定义”的错误。其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于:a=还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。输出结果:1 monday 2 tuesday 3 wendsday 4 thursday 5 friday6 saturday 7 sunday 8 monday 9 tuesday 10 wendsday11 thursday 12 friday 13 saturday 14 sunday 15 monday16 tuesday 17 wendsday 18 thursday 19 friday 20 saturday21 sunday 22 monday 23 tuesday 24 wendsday 25 thursday26 friday 27 saturday 28 sunday 29 monday 30 tuesday3. 如果枚举值与一些关键字冲突,例如:enum course{begin,then,end};由于程序有可能使用了iostream,并且使用了命名空间std,这时如果直接使用end进行赋值就有可能出现“不明确”符号的错误。解决此问题,有两个方法:(1)定义枚举值时应避免使用常用关键字,可以加前缀进行区分例如:enum course{e_begin,e_then,e_end};(2)可以在枚举值前面加入枚举类型:course::end
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'enum 枚举类型 c关键词',
blogAbstract:'enum是计算机编程语言中的一种数据类型。枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。1定义说明',
blogTag:'enum,c',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:0,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'不要因为急着赶路,让自己的步伐杂乱。远方是既定的目标,但路上才是最重要的经历!',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}enum|LOFTER(乐乎) - 记录生活,发现同好
LOFTER for ipad —— 记录生活,发现同好
下载移动端
关注最新消息
&nbsp&nbsp被喜欢
&nbsp&nbsp被喜欢
{list posts as post}
{if post.type==1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type==2}
{if post.type == 3}
{if !!post.image}
{if post.type == 4}
{if !!post.image}
{if !!photo.labels && photo.labels.length>0}
{var wrapwidth = photo.ow < 500?photo.ow:500}
{list photo.labels as labs}
{var lbtxtwidth = Math.floor(wrapwidth*(labs.ort==1?labs.x:(100-labs.x))/100)-62}
{if lbtxtwidth>12}
{if !!labs.icon}
{list photos as photo}
{if photo_index==0}{break}{/if}
品牌${make||'-'}
型号${model||'-'}
焦距${focalLength||'-'}
光圈${apertureValue||'-'}
快门速度${exposureTime||'-'}
ISO${isoSpeedRatings||'-'}
曝光补偿${exposureBiasValue||'-'}
镜头${lens||'-'}
{if data.msgRank == 1}{/if}
{if data.askSetting == 1}{/if}
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post_index < 3}
{if post.type == 1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
{if drlist.length>0}
更多相似达人:
{list drlist as dr}{if drlist.length === 3 && dr_index === 0}、{/if}{if drlist.length === 3 && dr_index === 1}、{/if}{if drlist.length === 2 && dr_index === 0}、{/if}{/list}
暂无相似达人,
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
this.p={ currentPage:1,pageNewMode:true,isgooglead3:false,ishotrecompost:false,visitorId:0, first:'',tag:'enum',recommType:'new',recommenderRole:0,offset:19,type:0,isUserEditor:0,};2014年7月 Linux/Unix社区大版内专家分月排行榜第三2003年2月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。  枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。
  枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用 enum 关键字声明的。&
&enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };&
 默认情况下,枚举中每个元素的基础类型是 int。可以使用冒号指定另一种整数值类型。  如果不为枚举数列表中的元素指定值,则它们的值将以 1 为增量自动递增。在前面的示例中,Days.Sunday 的值为 0,Days.Monday 的值为 1,依此类推。创建新的 Days 对象时,如果不显式为其赋值,则它将具有默认值 Days.Sunday (0)。创建枚举时,应选择最合理的默认值并赋给它一个零值。这便使得只要在创建枚举时未为其显式赋值,则所创建的全部枚举都将具有该默认值。枚举中大小写敏感,但是建议不要这样。
  注意:System.Enum 类型是所有枚举类型的抽象基类(它是一种与枚举类型的基础类型不同的独特类型),并且从 System.Enum 继承的成员在任何枚举类型中都可用。存在从任何枚举类型到System.Enum 的装箱转换,并且存在从 System.Enum 到任何枚举类型的取消装箱转换。System.Enum 本身不是枚举类型。相反,它是一个类类型,所有枚举类型都是从它派生的。类型 System.Enum 从类型 System.ValueType派生,而后者又从类型 object 派生。在运行时,类型 System.Enum 的值可以是 null 或是对任何枚举类型的装了箱的值的引用。
枚举的优点:1、枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。2、枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。3、枚举使代码更易于键入。在给枚举类型的实例赋值时,VS.NET IDE会通过IntelliSense弹出一个包含可接受值的列表框,减少了按键次数,并能够让我们回忆起可能的值
  声明:
public enum TimeOfDay
Moning = 0,
Afternoon = 1,
Evening = 2,
public string getTimeOfDay(TimeOfDay time)
string result = string.E
switch (time)
case TimeOfDay.Moning:
result = &上午&;
case TimeOfDay.Afternoon:
result = &下午&;
case TimeOfDay.Evening:
result = &晚上&;
result = &未知&;
1、获取枚举字符串
TimeOfDay time = TimeOfDay.A
Console.WriteLine(time.ToString());//输出:Afternoon
2、Enum.Parse()方法。这个方法带3个参数,第一个参数是要使用的枚举类型。其语法是关键字typeof后跟放在括号中的枚举类名。typeof运算符将在第5章详细论述。第二个参数是要转换的字符串,第三个参数是一个bool,指定在进行转换时是否忽略大小写。最后,注意Enum.Parse()方法实际上返回一个对象引用——我们需要把这个字符串显式转换为需要的枚举类型(这是一个取消装箱操作的例子)。对于上面的代码,将返回1,作为一个对象,对应于TimeOfDay.Afternoon的枚举值。在显式转换为int时,会再次生成1。
TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), &afternoon&, true);
Console.WriteLine((int)time2);//输出1
3、得到枚举的某一值对应的名称
lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0);
lbOne.Text = ((TimeOfDay)0).ToString();//返回:Morning
两种方法都能实现,但是当其值越界(不是枚举所列出的值),就有一定的区别了。大家可以根据自己的需求不同,选择合适的方法。
lbCon.Text = ((TimeOfDay)5).ToString(); //返回:5,如果越界返回原值
this.lbGetName.Text = Enum.GetName(typeof(TimeOfDay), 5); //返回:空字符串,如果越界返回空字符串
4、得到枚举的所有的值&
foreach (int i in Enum.GetValues(typeof(TimeOfDay)))
lbValues.Text += i.ToString();
5、枚举所有的名称&
foreach(string temp in Enum.GetNames(typeof(TimeOfDay)))
lbNames.Text+=
枚举和常量
  优先考虑枚举。
  在C#中,枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构。这表示可以对它们调用方法,执行有用的任务。注意因为.NET Framework的执行方式,在语法上把枚举当做结构是不会有性能损失的。实际上,一旦代码编译好,枚举就成为基本类型,与int和float类似。
  但是在实际应用中,你也许会发现,我们经常用英语定义枚举类型,因为开发工具本来就是英文开发的,美国人用起来,就直接能够明白枚举类型的含义。其实,我们在开发的时候就多了一步操作,需要对枚举类型进行翻译。没办法,谁让编程语言是英语写的,如果是汉语写的,那我们也就不用翻译了,用起枚举变得很方便了。举个简单的例子,TimeOfDay.Morning一看到Morning,美国人就知道是上午,但是对于中国的使用者来说,可能有很多人就看不懂,这就需要我们进行翻译、解释,就向上面的getTimeOfDay()的方法,其实就是做了翻译工作。所以,在使用枚举的时候,感觉到并不是很方便,有的时候我们还是比较乐意创建常量,然后在类中,声明一个集合来容纳常量和其意义。
  使用常量定义:这种方法固然可行,但是不能保证传入的参数day就是实际限定的。
using System.Collections.G
public class TimesOfDay
public const int Morning = 0;
public const int Afternoon = 1;
public const int Evening = 2;
public static Dictionary&int, string&
/// &summary&
/// 获得星期几
/// &/summary&
/// &param name=&day&&&/param&
/// &returns&&/returns&
public static string getTimeNameOfDay(int time)
if (list == null || list.Count &= 0)
list = new Dictionary&int, string&();
list.Add(Morning, &上午&);
list.Add(Afternoon, &下午&);
list.Add(Evening, &晚上&);
return list[time];

我要回帖

更多关于 100张同一个人的照片 的文章

 

随机推荐