Я не могу понять смысл этого простого кода - PullRequest
1 голос
/ 21 мая 2010

Я выполняю это задание, и есть некоторые вещи (из стартовых материалов), которые я не могу понять.

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

typedef Point Course[NUM_POINTS] ;

У меня нет идеи за последней строкой, и как я могу использовать ее в коде?

Ответы [ 4 ]

3 голосов
/ 21 мая 2010

Поскольку NUM_POINTS является последней записью в перечислении, она имеет наибольшее значение и является счетчиком других значений. Если NUM_POINTS не предназначено для использования в качестве фактического значения для точки, похоже, что целью последней строки является создание имени типа для массива точек размером, равным количеству «реальных» точек.

Вот одна приятная особенность: если вы добавите больше значений в перечисление (например, NORTH_EAST, SOUTH_WEST и т. Д.) до NUM_POINTS, строка typedef будет по-прежнему правильной, поскольку значение NUM_POINTS будет расти из-за новых значений, вставленных перед ним.

3 голосов
/ 21 мая 2010
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];

эквивалентны.

3 голосов
/ 21 мая 2010

перечисление начинается с 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] находится рядом с именем переменной, а не типом.

0 голосов
/ 21 мая 2010

Это означает, что курс может использоваться для представления массива точек, причем NUM_POINTS - это количество элементов в массиве.

...