首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于C编程中的枚举,以下是什么意思?

对于C编程中的枚举,以下是什么意思?
EN

Stack Overflow用户
提问于 2021-11-30 07:56:50
回答 2查看 98关注 0票数 2

在我正在阅读的一本书中,枚举常量是在数组之前引入的。仅通过几个示例演示了数组的使用。兹说明如下:

代码语言:javascript
复制
enum corvid { magpie, raven, jay, corvid_num};

char const * const bird [ corvid_num ] = 
{
  [raven] = "raven",
  [magpie] = "magpie",
  [jay] = "jay",
};

for ( unsigned i = 0; i < corvid_num ; ++i)
  printf ("Corvid %u is the %s\n", i, bird[i]);

--这声明了一个新的整数类型enum,我们知道它有四个不同的值。引用-枚举常量具有显式或位置值,正如您可能已经猜到的,位置值从0开始,所以在我们的示例中,我们使用了raven值为0,喜鹊值为1,jay值为2,corvid_num值为3。最后的3显然是我们感兴趣的3。

问题1:

[magpie] = "magpie"是否意味着magpieth位置指的是值"magpie"

问题2:

根据循环,bird[0]如何等于"raven",因为这是显式的,而不是位置值。同样,在第一次迭代之后,[i + 1]将等于[magpie]。为什么循环变量的类型是无符号的,而不是corvid或enum?

我想我误解了枚举常量。

也来自,

正如您可能已经猜到的那样,位置值从0开始,所以在我们的示例中,

值为0,magpie值为1,jay值为2,corvid_num值为3,这显然是我们感兴趣的3。

作者说得对,乌鸦应该有价值0而不是喜鹊,如果这是个错误,我的困惑就会完全消失。

EN

回答 2

Stack Overflow用户

发布于 2021-11-30 08:30:29

在声明char const * const bird [ corvid_num ]中,[ ]之间的项是数组的大小。在初始化程序列表[ raven ] = " raven "中,[ ]之间的项是一个所谓的指定初始化器,用于初始化数组中的特定项。

问题1:‘喜鹊=’喜鹊‘是否意味着’喜鹊‘的位置是指值“喜鹊”。

是。

问题2:根据循环,鸟类如何等同于“乌鸦”,因为这是显式的,而不是位置值。

因为枚举被命名为常量。如果一个枚举常量(raven等)没有显式地给出一个数字,它就被隐式地给出一个,从0开始。示例中的raven是枚举中的第二项,因此它获得值1,并且每当您在源中键入raven时,它将等同于键入1

正如您可能已经猜到的,位置值从0开始,所以在我们的示例中,我们使用了值0的乌鸦,带有1的喜鹊,带2的Jayand3,这显然是我们感兴趣的3。

这是Gustedt的一个错误--现代的C. Errata可能存在?示例代码的输出是:

代码语言:javascript
复制
Corvid 0 is the magpie
Corvid 1 is the raven
Corvid 2 is the jay

值得注意的是,如果我们没有使用指定的初始化器,而只是这样做的话:

代码语言:javascript
复制
char const * const bird [ corvid_num ] = 
{
    "raven",
    "magpie",
    "jay",
};

那么输出就会变成

代码语言:javascript
复制
Corvid 0 is the raven
Corvid 1 is the magpie
Corvid 2 is the jay
票数 5
EN

Stack Overflow用户

发布于 2021-11-30 08:30:11

除非显式重写,否则每个enum大小写都会获得上一个大小写的值加上一个,第一个大小写的值为零。在这里,magpie0raven1,等等(引用的部分说不正确)。最后一个大小写corvid_num是数组中其他情况的计数,因为该情况的+ 1在开始时表示为零大小写。

数组初始化使用C99指定的初始化器,它允许为特定索引分配值,并按任何顺序,即[raven] = "raven"初始化索引raven (此处为1)。传统上只按顺序列出每个值是可能的,但这样做可以重新排序枚举案例,而不必与数组同步更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70165988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档