Массивы с неопределенным размером (безразмерные массивы)

В отдельных случаях допускается объявление массива с неопределенным числом элементов (“пустыми” квадратными скобками). Один из таких немногих случаев – при инициализации массива с использованием списка начальных значений. При таком объявлении размер “безразмерного” массива определяется числом элементов в списке:

int days[] = { 31, 28, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31};

// Автоматическое определение размера массива

Данное объявление объявляет и инициализирует массив days из 12 элементов, то есть с размером 12.

Допускается подобное использование “безразмерных” многомерных массивов. При такой, “списковой” инициализации можно не задавать размер только первого (самого левого) измерения массива. Например, объявление массива temp можно переписать так:

double temp[][3] = { { 3.2, 3.3, 3.4}, { 4.1, 3.9, 3.9} };

(размерностью массива temp будет 2 на 3).

Безразмерные массивы типа char можно инициализировать c помощью строковых констант (литералов):

char digits[] = "0123456789";

Размер массива digits явно не задан, он определяется исходя из размера инициализирующего его литерала, в данном случае 11 (10 символов плюс нулевой символ).

Данное объявление можно рассматривать как краткую форму записи объявления

char digits[] = {'0','1','2','3','4','5','6','7','8','9','\0'};

Перечисления

Достаточно часто в программе приходится работать с переменной, принимающей одно из нескольких, заранее известных значений. В таких случаях бывает удобно ввести тип, явно определяющий набор возможных значений. Это можно сделать с помощью перечисления enum:

enum DayTime { morning, day, evening, night };

Объявив таким образом тип DayTime и перечислив набор допустимых значений, можно объявить переменную этого нового типа для хранения текущего времени дня:

DayTime current;

а затем присваивать ей допус­тимые значения типа DayTime, например:

current = day;

Контроль, который производит компилятор, при использовании такой переменной в программе, существенно более строгий, чем при использо­вании целого числа.

Для перечислений определены операции сравнения на равенство (= =) и неравенство (!=) с элементами этого же типа, например:

if (current != night)

... // выполнить действие

Внутреннее представление перечисленных элементов – це­лые числа. По умолчанию элементам перечисления соответствуют последова­тельные целые числа, начиная с 0. Этим можно пользоваться в програм­ме. Во-первых, можно задать, какое число какому элементу перечисления будет соответствовать:

enum { morning = 4, day = 3, evening = 2, night = 1);

// используются числа 4, 3, 2, 1

enum { morning = 1, day, evening, night };

// используются последовательные числа, начиная с 1

enum { morning, day = 2, evening, night };

// используются числа 0, 2, 3 и 4

Во-вторых, значения из перечисления можно использовать в выражениях вместо целых чисел. Преобразования из перечисленных значений в целые и наоборот раз­решены. Однако такая практика не рекомендуется. Для работы с целыми константами лучше использовать символические обозначения констант, а перечисления использовать как перечисления.








Дата добавления: 2015-11-10; просмотров: 875;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.