私はこの任務を遂行していますが、(スタートアップ資料から)理解できないことがいくつかあります。
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] ;
最後の行の背後にあるアイデアがわかりません。コードでどのように使用できますか?
列挙型は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;
タイプb
のエイリアスを作成しますa
。例:
typedef int foo;
int bar;
foo bar;
両方ともbar
同等です。あなたの場合、
typedef Point Course[NUM_POINTS] ;
タイプ(where )のCourse
エイリアスを作成します。Point[NUM_POINTS]
NUM_POINTS == 4
Course baz;
Point baz[NUM_POINTS];
同等です。
は列挙型の最後のエントリであるためNUM_POINTS
、最も高い値を持ち、他の値のカウントです。ポイントの実際の値として使用することを意図していない場合NUM_POINTS
、最後の行の目的は、「実際の」ポイントの数に等しいサイズのポイントの配列のタイプ名を作成することであるように見えます。
これが1つの優れた機能です。の前NORTH_EAST
に列挙型に値( 、SOUTH_WEST
など)を追加しても、typedef行は自動的に正しくなります。これは、の前に新しい値が挿入されたためにの値が大きくなるためです。 NUM_POINTS
NUM_POINTS
これは、Courseを使用してポイントの配列を表すことができることを意味します。NUM_POINTSは配列内のアイテムの数です。