我无法理解这个简单代码的要点

时间:2010-05-21 12:19:34

标签: c typedef adt abstract-data-type

我正在做这个任务,并且有些东西(来自初创材料)我无法理解。

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

typedef Point Course[NUM_POINTS] ;

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

4 个答案:

答案 0 :(得分:3)

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

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

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

最后一行为其中包含4个元素的点数组创建了一个别名。语法有点令人困惑,因为数组下标在Course之后而不在Point之后。

typedef Point Course[NUM_POINTS] ;

然而,它的工作方式与例如:

相同
int x[10];  

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

答案 1 :(得分:3)

typedef a b;

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

typedef int foo;

int bar;
foo bar;

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

typedef Point Course[NUM_POINTS] ;

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

Course baz;
Point baz[NUM_POINTS];

是等价的。

答案 2 :(得分:3)

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

以下是一个不错的功能:如果您为枚举添加更多值(例如NORTH_EASTSOUTH_WEST等)之前 NUM_POINTS,那么typedef行将自动仍然正确,因为NUM_POINTS的值会因为在它之前插入的新值而增长。

答案 3 :(得分:0)

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