- •Основы записи программ
- •Комментарии
- •Переменные и константы, объявления и присваивания
- •Основные конструкции: операторы, выражения, операции, операнды
- •Операторы объявления
- •“Линейные” операторы
- •Операторы управления программой
- •Условный оператор if(if-else)
- •Оператор выбораswitch
- •Оператор цикла while
- •Оператор цикла do–while
- •Оператор цикла for
- •Операторы перехода break,continueиgoto
- •Операция присваивания
- •Объединение действий с присваиванием
- •Операции увеличения и уменьшения на 1
- •Трактовка истинности
- •Операция ?
- •Операция «запятая»
- •Операция sizeof
- •Объявление, определение, параметры и вызов функции
- •Выход из функции
- •Организация памяти при выполнении программы
- •Правила видимости имен для функций
- •Одинаковое именование нескольких функций (перегрузка функций)
- •Параметры функций по умолчанию
- •Передача параметров функции по адресу
- •Библиотека стандартных функций
- •Целые числа
- •Вещественные числа
- •Логические значения
- •Символы
- •Преобразование типов
- •Вычисление значения выражения
- •Массивы
- •Одномерные массивы
- •Многомерные массивы
- •Массивы с неопределенным размером (безразмерные массивы)
- •Перечисления
Массивы с неопределенным размером (безразмерные массивы)
В отдельных случаях допускается объявление массива с неопределенным числом элементов (“пустыми” квадратными скобками). Один из таких немногих случаев – при инициализации массива с использованием списка начальных значений. При таком объявлении размер “безразмерного” массива определяется числом элементов в списке:
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
Во-вторых, значения из перечисления можно использовать в выражениях вместо целых чисел. Преобразования из перечисленных значений в целые и наоборот разрешены. Однако такая практика не рекомендуется. Для работы с целыми константами лучше использовать символические обозначения констант, а перечисления использовать как перечисления.