社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 1579|回复: 7

[讨论] 水军课堂:关于枚举类型的那些事儿

[复制链接]

7285

TA的帖子

128

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2017-1-5 10:34:31 | 显示全部楼层 |阅读模式
在咱们的EEWORLD论坛里隐藏着一支队伍庞大的水军,相信常来的网友们都有所听说。今天,咱们的一名水兵正在学习C语言枚举类型方面的知识点,他有点困惑,于是发起了一个小问题,引来了大家的各种讨论。下面做下本次讨论课的记录,可能刚好你也正在学习这一块,可能你了解过却是不求甚解,今天就让我们一起挖一挖C枚举吧~

水兵1号发问:C里面的枚举是属于基本数据类型,还是构造数据类型,枚举里面的值是不是和结构体一样,在后面当变量使用,改变的?


A:枚举不会改变的吧,里面的值是常量了,你要修改得在里面修改
1号:枚举定义好之后,不能改变里面的值了?
A:好像是递增,你取了第一个的值,下面的值都是递增了
A:可以啊,我也不太明白。队长,色哥,主任上
B冒泡:你定了一个枚举类型,里面设定的枚举值是常量。你定义一个枚举类型的变量,可以改变这个变量的值,这个变量的取值在你一开始设定的枚举类型的枚举值里面选
A:说得对。里面的值还是递增的
B:一般来说是递增的。但是不是绝对的
A:比如我在第三个值重新变个值,那么下面就按照第三个值来递增
A:递减的我好像没看过
B:我没说递减啊,我见过的世面少,我没见过递减的,但是我就记得当初学的时候有说不是绝对的。。有语言可以自己强制编码的
----等待其他成员上线中---表情党出没---你可以当作中场休息

C君上线:枚举就是
static A=1;
#define a A
#define b A++
#define c A+ = 2
。。。。
1号:不知道,枚举定义的时候,好不好加const的
C:const是const enum是#define,编译的时候替换,而不是常量,常量 是数据类型,哈哈 你晕了没 你晕了我目的就达到了~
D被晕出来了:(+﹏+)~
E:定义枚举的值是常量,定义好后就不能变了
D:声明枚举变量跟什么其它一样的,可以加const


1号:E君救星你出来啦~~数组前面加一个CONST,就会把数据定死,不能修改了,我在想枚举,结构体这种,是不是也可以加一个CONST,把数据固定死的?
C:#define前面是不会加const的 一个道理
F:枚举定死有啥好处?
C:enum是数据类型,成员就是常量 定义好了就直接替换 不会出现改动
1号:C啊,你的意思是结构体,枚举不能加CONST的
D:可以加const
C:枚举放在结构体里面?
F:很多种方法都可以实现相同的功能,选最好的实现方法就好了。
D:自己这个小程序跑一下就知道了
C:不是不能加 不报错也可以加 没意义
F:本来i++可以办的事 你非要写成 i=i+1 就是闲的

1号:是这样的,单片机里数组定义好,就是在内存区定义的,加了CONST,就是把数据存到程序区去了,我在想,结构体,枚举定义,是不是也有这种概念在里面?
C:enum color
{
a=1,
b,
c,
d
}


就相当于
#define a 1
#define b 2
#define c 3
#define d 4
F:你们说的好复杂,数组以后的内容我都没有学过……但感觉上面的两者应该是不相等的
G君打算用代码实践说话:
1.png
G:不光可以加const 还可以加static
A:还可以静态?不会报错吗?
G:你试试啊

E:@1号 结构体,联合体,类这些数据类型的定义是不占存储空间的
G:E啊,不同编译器对此解释不大一样啊,有的占有的不占
E:@G君  怎么个占法?
G君又扔出一波图片:
2.png

3.png

4.jpg

C:枚举常量存储在数据段的静态存储区里
E:@G 你那是输出大小而已,并没占内存
G:vs的c编译器不允许空结构体
D:那是申明了,申明一个变量才有空间
G:
5.png

6.jpg

1号:E,G,继续水,小弟早上看了你们的聊天,收获很多
E:不明白的就写代码,深究看代码生成的汇编
H大大来发言:C是C,别听瞎说
E:调试的时候,有时候是要看汇编的
I,F:怼
G:是,找入口地址,然后绕过验证
E:那是黑客
-------省略中间若干对话,场面开始失控-------一段时间后回归正题---------
H:
第一个问题,const那个,就几句话解释:
第一句,const修饰的是变量,不是类型。所以对enum,struct类型定义来说,,,没用。
第二句,enum引入的是类型符号,和数值没太多关系,虽然你可以定义1,2,3,但是同样你也可以不定义1,2,3,只当符号用,
第三句,#define 是宏处理的字符替换,而enum是C里面的类型,好处是enum有类型检查,而#defien没有。
完毕。


收尾:
D:struct a{} bbc; 这个已经是申明一个变量了,肯定有内存,E说的是定义, struct a{}; 这样的


------
1号:在轻松中学习,在学习中放松,不要把学习当成负担,学习是快乐的,i love 水群





小伙伴们对上面讨论的内容有任何异议和疑问都可以跟帖继续发问哦~同样,有相关的问题也可以再发帖求助或者觉得上述讨论有些点你觉得值得一提却没有提到,=热烈欢迎发帖来发表你的个人意见和见解!!!






此帖出自编程基础论坛

扫一扫,关注 EEWORLD 微信订阅号

行业资讯、电子趣闻、技术干货、精彩活动……尽可掌握~



回复

使用道具 举报

5265

TA的帖子

81

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-1-5 10:36:14 | 显示全部楼层
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
————————————————————————
少开箱,少点灯,少搭开发环境,如果你只会这些,对不起,我不认识你


回复

使用道具 举报

2480

TA的帖子

8

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-1-5 10:38:06 | 显示全部楼层
拉过来了!真是个好管理员,给你32个赞。,刚好32个


回复

使用道具 举报

1337

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2017-1-5 10:41:59 | 显示全部楼层
基础不牢,左摇右晃
HELLO_WATER


回复

使用道具 举报

557

TA的帖子

2

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-1-5 10:51:03 | 显示全部楼层
look look 看了一下,相当OK噢
女神发贴就是棒棒哒
我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       


回复

使用道具 举报

738

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-1-5 11:15:07 | 显示全部楼层
亚里士缺德


回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-1-6 11:57:02 | 显示全部楼层
茶话会即视感,又干货满满,必须赞!!!


回复

使用道具 举报

7622

TA的帖子

48

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-10-10 20:29:29 | 显示全部楼层
女神不容易
没有一件事情是容易的,所以,起念头时,一定要好好琢磨


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-2-18 03:13 , Processed in 0.219591 second(s), 18 queries , Redis On.

快速回复 返回顶部 返回列表