你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于枚举体所占内存空间的大小问题

[复制链接]
freeelectron 提问时间:2016-3-19 19:38 /
#include "stdio.h"
enum Season
{
    spring, summer=100, fall=96, winter ,winter1
};
typedef enum
{
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
Weekday;
void main()
{
   Weekday today ;
    printf("%d bytes\n", sizeof(spring));

    printf("%d bytes\n", sizeof( Saturday ));
    printf("%d bytes\ \n", sizeof( today ));

}

1. sizeof( Saturday )的大小是4;
2.sizeof( today )的大小也是4;
Saturday只是一个枚举元素啊,而today是一个枚举变量,为什么他俩所占的内存空间大小是一样的?
1.png
收藏 评论5 发布时间:2016-3-19 19:38

举报

5个回答
freeelectron 回答时间:2016-3-19 19:39:00
补充:VS2010编译环境!
moyanming2013 回答时间:2016-3-20 16:29:38
***Saturday只是一个枚举元素啊,而today是一个枚举变量,为什么他俩所占的内存空间大小是一样的?
---比如
int a = 6;
在x86系统中,数字6占用4个字节,int是4个字节,变量a也是4个字节。这里可以把6理解为整形元素,a是一个整形变量。
枚举毕竟和一般变量不同,跟编译器相关。
如果使用keil,那么枚举的大小可能是1个字节,最大可以是4个字节,这要在编译器里面设置。
freeelectron 回答时间:2016-3-21 09:24:12
moyanming2013 发表于 2016-3-20 16:29
***Saturday只是一个枚举元素啊,而today是一个枚举变量,为什么他俩所占的内存空间大小是一样的?
---比如 ...

我试试keil
power568 回答时间:2016-3-21 12:35:55
支持2楼,同类型的值跟变量类型所占的空间大小应该是一样,否则赋值也不对...
szgaos 回答时间:2016-3-21 17:11:06
枚举只在编译过程中起作用,限定变量的范围,不在此范围内,则编译时会报警。
Weekday today ; 只是表示today 是weekday中的某一个值(位宽为4),此值与CPU和编译环境相关
Saturday,则是具体数5,他的位宽就是4.

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版