我正在做这个任务,并且有些东西(来自初创材料)我无法理解。
typedef enum
{
NORTH,
EAST,
SOUTH,
WEST,
NUM_POINTS
} Point;
typedef Point Course[NUM_POINTS] ;
我不明白最后一行背后的想法,我怎么能在代码中使用它?
答案 0 :(得分:3)
枚举从0开始,每个值增加1。
所以你有:NORTH = 0
,EAST = 1
,SOUTH = 1
,WEST = 3
,NUM_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_EAST
,SOUTH_WEST
等)之前 NUM_POINTS
,那么typedef行将自动仍然正确,因为NUM_POINTS
的值会因为在它之前插入的新值而增长。
答案 3 :(得分:0)
这意味着可以使用Course来表示Points数组,其中NUM_POINTS是数组中的项数。