Перечислимый тип данных - PullRequest
2 голосов
/ 23 ноября 2010

Какая польза от ключевого слова enum? Где мы можем использовать перечислимый тип данных? Кто-нибудь может объяснить на примере?

Ответы [ 4 ]

6 голосов
/ 23 ноября 2010

enum дает имя для номера.

enum { MAX_LINES = 60 };

Внешне, так же как и #define:

#define MAX_LINES 60

Преимущество enum над#define означает, что имя записано в отладочной информации, поэтому отладчик может использовать его.

Вы также можете использовать enum для определения набора связанных значений:

typedef enum { RED, GREEN, BLUE } Colour;

Затем вы можете использовать их для индексации в триплетном массиве значений RGB:

typedef unsigned char Pixel[3];

Pixel p;

p[RED]   = 128;
p[GREEN] = 128;
p[BLUE]  = 255;

Возможно, это не лучший пример в мире, но указание на то, где можно использовать enum.

0 голосов
/ 23 ноября 2010

Перечисление - это список постоянных целочисленных значений, как в

enum boolean { FALSE, TRUE };

Первое имя в перечислении имеет значение 0, следующее 1 и т. Д., Если не указаны явные значения.Если указаны не все значения, неопределенные значения продолжают последовательность от последнего указанного значения:

enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };

Поскольку char внутренне представляется с использованием целого числа, вы можете объявить перечисления, которые также указывают на символьные константы.:

enum whitespaces { SPACE = ' ', TAB = ’\t’, NEWLINE = ’\n’, RETURN = ’\r’ };

Преимущество перечисления перед #define заключается в том, что значения могут быть сгенерированы для вас.Кроме того, отладчик может печатать значения переменных перечисления в их символической форме.

0 голосов
/ 23 ноября 2010

Перечисления - это перечислители (хорошо, тривиально), всегда обрабатываемые как целые числа, и они используются для упорядочения чего-либо, что вы могли бы использовать позже, например, общих значений или индексов. Но, как следует из названия, они перечисляются, всегда по возрастанию, как:

enum myenum {<br> January, February, March, April, May, June, July, August, September, October, November, December<br> };

Тогда, если у вас есть массив, скажите:

int months[12][30];

Вы можете позвонить по своим месяцам, используя:

months[March][...];

Кроме того, если вы объявите:

enum myenum {  January = 1, February, March, ..., };

Эта ваша программа запустит счетчик перечисления с 1 и так далее.

Наконец, об этом последнем правиле: вы можете установить начальные значения по своему усмотрению, например, 10, 20, 30, 42 и т. Д., Но вы также можете установить одно из перечисленных значений и позволить другим по умолчанию сортироваться. 1017 *

0 голосов
/ 23 ноября 2010

перечисления вводятся во время «ANSI C» (или c89), основной синтаксис:

enum type {
 item1,
 item2,
 item3
};

Он принимает значение, начиная с 0, item1 будет содержать 0, item2 = 1, item3 = 2.. Пока вы не укажете компилятору, с какого значения оно должно начинаться,

enum type {
 item1 = 10,
 item2,
 item3
};

, тогда значения будут: item1 = 10, item2 = 11, item = 12 .. Также компилятор будет рассматривать их как целые числа.

int i=10;
i += item1;

, что

i = i + 10;

Вы также можете определить переменную типа enum.

enum type mytype;
mytype = item1;

В этом случае переменная item1 преобразуется (молча) к типу "enum type".Вы можете смешивать переменную типа «enum type» с целым числом.

mytype = i;
mytype = mytype + 100;

, хотя переменная mytype имеет тип «enum type», она также рассматривается как целое число, поэтому она может содержать любую целочисленную переменную.Но IMO, перечисления должны использоваться как константы и не должны участвовать в арифметических операциях, и компилятор должен сам определять значение, а не присваивать значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...