枚举无法理解内存和功能

时间:2016-06-15 04:30:02

标签: c memory enums

我无法理解下面的代码。

#include<stdio.h>
enum x_t{a,b,c,d};
main()
{
enum y{ x=3};
a=x;
printf("a=%d\n",a);
printf("x=%d\n",x);
printf("c=%d\n",c);
}

我不清楚的是: 1 - 为什么枚举不能分配给其他枚举,它们是常量吗?如果它们不是常数,那么我可以为枚举分配一个数字吗? 2 - 当我们可以在没有x_t的情况下直接访问一个值时,需要为枚举分配一个标签,我知道这是为了设计中的标识符目的,但是是否会有任何分配了这个标签的内存,如果是这样的话在数据段中分配?

我可以在第一点询问的代码下面这样做。

#include<stdio.h>
enum x_t{a,b,c,d};
main()
{
a=3;
printf("a=%d\n",a);
printf("x=%d\n",x);
printf("c=%d\n",c);
}

请帮助我理解枚举的内存结构,为什么它表现为常量。 我得到的错误是

  

左值作为赋值的左操作数

1 个答案:

答案 0 :(得分:1)

<section id="weddings"></section>就是这样:文字常量。它们不是可以改变的变量。

如果要将某些标识符相互关联,可以使用enum。经典是一副牌中的套装:

enum

这意味着在整个代码中,您可以说enum Suits { Clubs, Diamonds, Hearts, Spades }; ,或者像suit = Hearts;之类的那样比较它们。但是if (suit1<suit2)没有意义。

作为一个实现细节,Hearts = Diamonds;将获得值Clubs,而下一个将获得连续值。如果您愿意,可以更改此项:

0

但是,对于C和C ++,如果要输出该值,则会获得其等效的数字:不是字符串。要做到这一点,你必须自己组织。假设原始定义:

enum Suits { Clubs=1, Diamonds/*=2*/, // Diamonds gets 2 anyway: it's the next value
             Hearts=4, Spades=8 };