枚举类型内存空间问题,求教~~

DespairingShaver 2008-12-19 03:12:39
我定义了一个枚举类型,请问它的内存空间是多少呢?
typedef enum{
UP,
DOWN,
RIGHT,
LEFT
}DIRECT;

编译器此时为它分配内存么?大小是多少?谢谢,请指教。。
为什么printf("%d\n",sizeof(DIRECT));结果是4。
我认为应该为它分配4个int的大小,因为4个int值都存在,因该说4×4 = 16啊
...全文
1166 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymy1248227142 2012-02-24
  • 打赏
  • 举报
回复
还是没理解透彻
xylophone21 2011-10-14
  • 打赏
  • 举报
回复
C99 6.7.2.2.4
Each enumerated type shall be compatible with char, a signed integer type, or an
unsigned integer type. The choice of type is implementation-defined,110) but shall be
capable of representing the values of all the members of the enumeration. The
enumerated type is incomplete until after the } that terminates the list of enumerator
declarations.

所以到底是1,2还是4或者其他什么是编译器决定的。
Qlaiaqu 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lbh2001 的回复:]
引用 6 楼 BluntBlade 的回复:
sizeof(DIRECT) 不一定得到4。


你说是C++下,纯C下和C++在这一点上是不一样的
[/Quote]
在十六位机器上面应该是2
Qlaiaqu 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lbh2001 的回复:]
引用 6 楼 BluntBlade 的回复:
sizeof(DIRECT) 不一定得到4。


你说是C++下,纯C下和C++在这一点上是不一样的
[/Quote]
在十六位机器上面应该是2
DespairingShaver 2008-12-19
  • 打赏
  • 举报
回复
我使用的编译器是VC++ 6.0,结果就是4,再次感谢大家的帮助!!
lbh2001 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 BluntBlade 的回复:]
sizeof(DIRECT) 不一定得到4。
[/Quote]

你说是C++下,纯C下和C++在这一点上是不一样的
linxiweier 2008-12-19
  • 打赏
  • 举报
回复
就是 3楼说的那样,赞一个。
所以说,枚举类型就是一种常量定义,从某种程度上来说就是一种用来限定范围的代号,在内存空间上来说都是整型的,如果你想定义字符串,那就免了吧。
判断枚举变量的值,然后在函数内自己赋值吧。
BluntBlade 2008-12-19
  • 打赏
  • 举报
回复
sizeof(DIRECT) 不一定得到4。
DespairingShaver 2008-12-19
  • 打赏
  • 举报
回复
如果只是定义了一些变量类型的话,那不应该有值啊,我现在比较倾向2楼的说法,呵呵
已经明白了sizeof(DIRECT) 为什么是4了,谢谢大家帮我!!
nullah 2008-12-19
  • 打赏
  • 举报
回复
up
yuwei2589 2008-12-19
  • 打赏
  • 举报
回复

typedef enum{
UP,
DOWN,
RIGHT,
LEFT
}DIRECT;

Lz,这只是定义变量类型而已,和定义一个结构体类型一样,并不会实际分配内存。
printf("%d\n",sizeof(DIRECT));则是输出变量类型为DIRECT的存储空间。

枚举类型在c语言中自动按照Int类型大小进行存储,所以可以看到sizeof(DIRECT) =4.
Qlaiaqu 2008-12-19
  • 打赏
  • 举报
回复
它没有空间,它只是定义了一些常量而已。你不能用struct的相同的思路去认为它,对于sizeof(DIRECT),因为可以将DIRECT看作是int,所以算出来的是4
lbh2001 2008-12-19
  • 打赏
  • 举报
回复
在C语言中枚举的类型是int,这是标准规定的
在C++就有些微妙,它同最小能容纳它的所有值的类型相同

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧