freeelectron 发表于 2016-3-19 19:38:26

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

#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是一个枚举变量,为什么他俩所占的内存空间大小是一样的?

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.
页: [1]
查看完整版本: 关于枚举体所占内存空间的大小问题