我正在做这个作业,有一些我无法理解的东西(来自启动材料)。
typedef enum
{
NORTH,
EAST,
SOUTH,
WEST,
NUM_POINTS
} Point;
typedef Point Course[NUM_POINTS] ;
我不明白最后一行背后的想法,我如何在代码中使用它?
我正在做这个作业,有一些我无法理解的东西(来自启动材料)。
typedef enum
{
NORTH,
EAST,
SOUTH,
WEST,
NUM_POINTS
} Point;
typedef Point Course[NUM_POINTS] ;
我不明白最后一行背后的想法,我如何在代码中使用它?
由于NUM_POINTS
是枚举中的最后一个条目,因此它具有最高值,并且是其他值的计数。如果NUM_POINTS
不打算用作 Point 的实际值,则看起来最后一行的目的是为大小等于“真实”点数的点数组创建类型名称。
这是一个很好的特性:如果你在之前的枚举中添加更多的值(比如,NORTH_EAST
等SOUTH_WEST
),typedef 行将自动仍然是正确的,因为在它之前插入的新值将会增长。 NUM_POINTS
NUM_POINTS
枚举从 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]
部分位于变量名称而不是类型旁边。
typedef a b;
为typeb
创建一个别名a
,例如
typedef int foo;
int bar;
foo bar;
两个bar
s 是等价的。在你的情况下,
typedef Point Course[NUM_POINTS] ;
为类型(where )Course
创建一个别名,所以Point[NUM_POINTS]
NUM_POINTS == 4
Course baz;
Point baz[NUM_POINTS];
是等价的。
这意味着 Course 可用于表示 Points 数组,其中 NUM_POINTS 是数组中的项目数。