1

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

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

typedef Point Course[NUM_POINTS] ;

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

4

4 回答 4

3

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

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

于 2010-05-21T12:33:24.470 回答
3

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

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

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

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

typedef Point Course[NUM_POINTS] ;

但是,它的工作方式与例如:

int x[10];  

[10]部分位于变量名称而不是类型旁边。

于 2010-05-21T12:20:59.987 回答
3
typedef a b;

为typeb创建一个别名a,例如

typedef int foo;

int bar;
foo bar;

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

typedef Point Course[NUM_POINTS] ;

为类型(where )Course创建一个别名,所以Point[NUM_POINTS]NUM_POINTS == 4

Course baz;
Point baz[NUM_POINTS];

是等价的。

于 2010-05-21T12:23:15.443 回答
0

这意味着 Course 可用于表示 Points 数组,其中 NUM_POINTS 是数组中的项目数。

于 2010-05-21T12:23:25.503 回答