C中枚举值的内存位置

我想我已经在某处读过,在C中取一个枚举值的地址是非法的 (枚举值不是左值;但是,我现在找不到任何关于此的信息)。 这是正确的,如果是的话,为什么?


编辑:

这是一个例子,用上面的“枚举值”来澄清我的意思。 我的意思是取下面的first_value的地址,而不是获取枚举的实际实例的地址:

 enum myenum { first_value, second_value }; 

“枚举值”略显模糊; 但是,我认为你的意思是:

 enum myenum { first_value, second_value }; 

在这种情况下,获取first_value的地址是first_value 。 原因是first_value实际上并不存在于内存中……它只是一个常量,实际上是数字0的另一个名称(当然,你也不能取地址)。

另一方面,如果你的意思是你是否可以获取声明为枚举的变量的地址:

 enum myenum x; enum myenum *mypointer=&x; 

那绝对是可能的。

如果你有:

 enum E { X, Y, Z }; 

那么你不能取X,Y或Z的地址,只能取0,1或2的地址。

但是,您可以获取枚举实例的地址:

 typedef enum { X, Y, Z } E; int main() { E e; E * ep; ep = & e; } 

枚举用于替换#define链:

 #define SUCCESS 0 #define LITTLE_ERROR 1 #define BIG_ERROR 2 

这可以替换为:

 enum { SUCCESS, LITTLE_ERROR, BIG_ERROR }; 

诸如SUCCESS类的枚举值仅仅是整数常量的符号,它不会存储在程序存储器的任何位置。 因此,取其地址是没有意义的。

枚举的值名称只是整数的常量别名,因此尝试获取其地址是没有意义的。 当然,您可以将枚举变量的地址设置得很好。

请参考以下示例:

 enum { FIRST,SECOND } var; 

这里FIRSTSECOND是常量宏.Hence & operator不起作用,因为它没有存储在内存中的任何地方

但是对于var将分配内存位置并且可以使用&运算符。

据我所知,C中的枚举只是整数。 所以它就像指向局部变量。