- •Цикл for
- •Цикл while
- •Цикл do…while
- •Оператор goto
- •Указатели предназначены для хранения адресов областей памяти, а cсылка представляет собой синоним имени, указанного при инициализации ссылки. Далее подробно рассматриваются эти важные темы.
- •Указатель на функцию
- •Указатель на объект
- •Указатель на void
- •Локальные переменные
Оператор goto
Оператор безусловного перехода goto имеет формат:
goto метка;
В теле той же функции должна присутствовать ровно одна конструкция вида:
метка: оператор;
Оператор goto передает управление на помеченный оператор. Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.
Использование оператора безусловного перехода оправдано в двух случаях:
принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
переход из нескольких мест функции в одно (например, если перед выходом из функции всегда необходимо выполнять какие-либо действия).
В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование goto приводит только к усложнению структуры программы и затруднению отладки (Даже в приведенных случаях допустимо применять goto только в случае, если в этих фрагментах кода не создаются локальные объекты. В противном случае возможно применение деструктора при пропущенгюм конструкторе, что приводит к серьезным ошибкам в программе). Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и один выход.
В любом случае не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:
int к; ...
goto metka; ...
{int а = 3, b = 4;
к = а + b;
metka: int m = к + 1; ...
}
После выполнения этого фрагмента программы значение переменной m
Оператор break
Оператор break используется внутри операторов цикла или switch для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.
Оператор continue
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [ выражение ];
Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.
Структура — это составной тип данных, который состоит из элементов разных типов. Объявление структуры следует рассматривать как объявление типа.
Замечание. В C++ структуры заключают в себе не только данные, но и код и относятся к средствам объектно-ориентированного программирования. В данном разделе объектные свойства структур не рассматриваются.
Пример. Объявление структуры, которая хранит сведения о журнале: название, год, номер.
struct magazin
{
char* tittle;
int year;
int number;
};
Ниже определена и инициализирована переменная структура mag.
magazin mag = {“Nature”, 3, 1995);
Доступ к элементам структуры осуществляется по составному имени:
имя_структуры.имя_элемента.
Здесь точка обозначает оператор выбора, а составное имя дает еще один пример адресного выражения.
Если есть указатель на структуру, то доступ к элементу возмо¬жен при помощи операции косвенного выбора:
указатель_на_структуру->имя_элемента.
Стрелка, составленная из двух символов, обозначает оператор косвенного выбора.
Структуры можно присваивать, передавать в виде параметров функции, возвращать в виде результата функции. Структуры нельзя сравнивать операциями ==, /=, < , > и т.п. Структуры, как и массивы, можно инициализировать списком значений.
Пример. Работа со структурой magazin.
// объявления и инициализация
magazin *pm, m = (“Nature”, 2000, 4};
// доступ к элементам
cout « m.tittle « ” ” « m.number « endl;
// одна структура в свободной памяти
*pm = new magazin;
*pm = m;
pm->tittle = “Nature”;
delete pm;
// массив структур в свободной памяти
pm = new magazin[10];
pm[0].tittle = “Природа”;
delete[] pm;
