c - enum 是常数还是常数变量或其他什么?在以下代码中出现错误

标签 c enums constants

#include<stdio.h>

typedef enum {a,b,c}key;

int main()
{
 key d=3;
 printf("%p\n,&a);
 printf("%p\n",&d);
 printf("%d\t %d\t %d\t %d\n",a,b,c,d);
 return 0;
}

当我尝试获取 a 或 b 或 c 的地址时 编译器抛出一元 & 需要左值的错误

我没有得到它,因为它适用于相同类型的 d。 这里发生了什么事 ?这些常量或 const 变量是由编译器分配的值 0 1 和 2。 因为这种错误我们只得到常量。 请帮忙,我是 C 的新手

最佳答案

看看什么是enum真的是。这是一个值(value)。请记住,如果您不初始化枚举列表,第一个枚举的值将是 0

考虑 bool 枚举示例:

typedef enum /* Declares an enumeration data type called BOOLEAN */
{
    false,     /* false = 0, true = 1 */
    true 
}BOOLEAN ; 

所以枚举“false”是 0。你不能取 0 的地址,但是如果你从中得到一个“BOOLEAN”:

BOOLEAN something = false; 

现在 something 是一个变量,你可以获取它的地址。

关于c - enum 是常数还是常数变量或其他什么?在以下代码中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953349/

相关文章:

c++ - C POSIX API 是否与 C++ STL 兼容

我可以让 pthread_t 实例超出范围吗?

c# - 获取或设置访问器预期的枚举

c++ - 将数组数据插入模板

c - 以不确定的顺序使用具有副作用的函数是否存在不确定的行为?

c - 将文件中的数据存储到结构数组中

javascript - 你能在 TypeScript 类中设置静态枚举吗?

c++ - 结构中的枚举

perl - 如何在 Perl 中创建嵌套哈希作为常量?

c++ - 一个运算符 == 其参数是非常量引用