【问题标题】:I cannot understand the point of this simple code我无法理解这个简单代码的意义
【发布时间】:2010-05-21 12:19:33
【问题描述】:

我正在做这个作业,有一些东西(来自启动材料)我无法理解。

typedef enum
{
    NORTH,
    EAST,
    SOUTH,
    WEST,
    NUM_POINTS
} Point;

typedef Point Course[NUM_POINTS] ;

我不明白最后一行背后的想法,我该如何在代码中使用它?

【问题讨论】:

标签: c typedef adt abstract-data-type


【解决方案1】:
typedef a b;

使b 成为a 类型的别名,例如

typedef int foo;

int bar;
foo bar;

bars 是等价的。在你的情况下,

typedef Point Course[NUM_POINTS] ;

使Course 成为Point[NUM_POINTS] 类型的别名(其中NUM_POINTS == 4),所以

Course baz;
Point baz[NUM_POINTS];

是等价的。

【讨论】:

  • 我有点明白你的意思。那么 Point[4] 到底是什么意思呢?如果 Point 是一个结构,那么我会得到,但它是一个“枚举”。原谅我的无知。
  • 枚举只是一个 int。所以它让你成为一个整数数组。
  • @M4design:4 个Point 的数组。您可以将enum 视为int
【解决方案2】:

由于NUM_POINTS 是枚举中的最后一个条目,因此它具有最高值,并且是其他值的计数。如果NUM_POINTS 不打算用作 Point 的实际值,那么看起来最后一行的目的是为大小等于“真实”点数的点数组创建类型名称。

这是一个很好的特性:如果你向枚举添加更多值(如NORTH_EASTSOUTH_WEST 等)之前 NUM_POINTS,typedef 行将自动仍然正确,因为NUM_POINTS 的值会因为之前插入的新值而增长。

【讨论】:

    【解决方案3】:

    枚举从 0 开始,每个值加 1。

    所以你有:NORTH = 0EAST = 1SOUTH = 1WEST = 3NUM_POINTS = 4

    NUM_POINTS 设置为枚举中的项目数。

    最后一行为包含 4 个元素的点数组创建了 Course 的别名。语法有点混乱,因为数组下标在Course 之后,而不是在Point 旁边。

    typedef Point Course[NUM_POINTS] ;
    

    但它的工作方式与示例相同:

    int x[10];  
    

    [10] 部分紧挨着变量名而不是类型。

    【讨论】:

    • 我知道,我只是不明白我们如何或为什么要使用最后一行。我觉得我应该解释更多,我应该:) 吗?
    • 嗯,您打算使用的项目数。这不是一个不常见的成语,当它是一个好主意时非常巧妙。
    • @M4design:你写的时候还在写,现在请重新检查可能更有意义。
    【解决方案4】:

    表示Course可以用来表示一个Points数组,NUM_POINTS是数组中的item个数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 2017-08-10
      • 2018-02-21
      • 1970-01-01
      • 2022-01-24
      • 2012-05-19
      • 2019-12-25
      • 1970-01-01
      相关资源
      最近更新 更多