Операторы организации циклов
Цикл – повторение некоторой последовательности операторов.
Один проход цикла – итерация.
Цикл состоит из кода цикла, начальной установки, модификации параметра цикла и проверки условия.
Существуют циклы с предусловием (for, while) и с постусловием (do while).
Оператор while
Начальное_значение;
while(условие)
{
код_цикла;
модификация_циклической_переменной;
}
Оператор dowhile
Начальное_значение;
do
{
код_цикла;
модификация_циклической_переменной;
}
while(условие)
Оператор for
For(начальное_значение;условие; модификация_циклической_переменной)
{
код_цикла;
}
Операторы передачи управления
Оператор breakиспользуется только в циклах и в операторе switchи означает «прервать работу данного оператора».
Оператор continueиспользуется только в циклах и означает «пропустить один шаг итерации цикла». Перед continueследует указывать изменение циклической переменной, чтобы избежать бесконечного цикла.
Оператор return прерывает работу функции.
Оператор gotoпозволяет перейти непосредственно к помеченному оператору.
Gotoметка;
…
метка: оператор;
Классы памяти
Любая переменная имеет область действия и время жизни. Область действия (видимости) – та часть прошраммы, в которой переменая доступна. Время жизни – период, в течении которого переменная хранит своё значение.
Переменные могуть быть глобальными и локальными.
Переменная, определённая вне любого блока и функции, является глобальной. Для любой глобальной переменной область действия и время жизни – в течение всей программы, кроме блока, где она может быть переопределена. Глобальные переменные автоматически получают нулевое значение.
Переменные, определённые внутри блока или функции, являются локальными. Для них область действия и время жизни – тот блок или функция, в котором данная переменная определена. Локальная переменнная автоматически получает «мусор» (случайное отрицательное число).
Для обращения к глобальной переменной в блоке, где определена переменная с таким же названием, перед её именем следует ставить «::».
Все функции имеют глобальное время жизни.
Классы памяти определяют время жизни и область видимости переменной:
1. Auto
2. Extern
3. Static
4. Register
Если класс памяти не указан явно, компилятор определяет его исходя из контекста определения данных. Так, локальной переменной автоматически приписывается класс памяти auto, а глобальной – extern.
Auto
Класс памяти autoприменяется только к локальным переменным.
1. Память для переменных autoвыделяется автоматически при входе в блок и автоматически же освобождается при выходе из блока.
2. К переменным autoдоступ вне блока напрямую невозможен (только через указатель).
3. Значение переменной задаётся либо при инициализации, либо присваиванием. Если значение отсутствует, в ней хранится «мусор».
Register
Регистровыми могут быть только локальные переменные целочисленного типа.
Ключевое слово registerпредписывает компилятору распределить память для переменной в регистре, если это возможно. Современные компилятора способны сами распознать часто используемую переменную и поместить её в регистр. К тому же, регистр ограничен, поэтому не всегда, когда класс registerзадаётся вручную, переменная становится регистровой.
Использование регистра сокращает время доступа к переменной, а значит, и выполнения программы.
Static
Класс памяти staticможет применяться как к локальным, так и к глобальным переменным.
Если staticприменяется к локальной переменной, то область видимости данной переменной остаётся внутри того блока/функции, где она определена, а время жизни увеличивается до всей программы. Так как время жизни такой переменной постоянно, она автоматически получает нулевое значение.
При выходе из блока/функции такая переменная сохраняет своё последнее значение.
Если staticприменяется к глобальной переменной, то их область видимости сужается до модуля/файла, в котором она определена (при работе с многофайловыми проектами), а время жизни остаётся в течении всей программы.
Extern
Класс памяти externавтоматически применяется к глобальным переменным/функциям. Область видимости такой переменной – от точки определения до конца исходного модуля, поэтому при использовании многофайловых проектов следует объявить эту переменную в других модулях, чтобы сделать её видимой.