Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_na_S__Ch1_Strukturnoe_i_modul.doc
Скачиваний:
15
Добавлен:
22.02.2015
Размер:
553.98 Кб
Скачать

Операторы передачи управления Оператор безусловного перехода

Формат:

goto метка;

В теле той же функции, где использован оператор goto, должна присутствовать одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор. Метка − это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.

!!! Не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена.

Оператор break

Оператор break используется внутри операторов цикла, условного оператора или переключателя для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.

Оператор continue

Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.

Оператор return

Оператор возврата из функции return завершает работу функции и передает управление в точку ее вызова.

Формат оператора:

return [выражение];

Выражение должно иметь скалярный тип. Если тип возвращаемого результата описан как void, выражение должно отсутствовать.

Указатели и ссылки

При выполнении оператора определения переменной, например,

int i =10;

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

В С++ различают три вида указателей − указатели на объект, на функцию и на void, отличающиеся свойством и набором операций.

Указатели на функции рассмотрены в теме «Функции »методических указаний «Программирование на языке С++. Часть 2. Модульное программирование».

Указатели на объект содержит адрес области памяти, в которой хранятся данные определенного типа. Объявление указателя имеет вид

тип * имя;

где тип может быть любым, кроме ссылки и битового поля (см. далее); имя − это имя объекта. Звездочка относится непосредственно к имени объекта, поэтому, чтобы объявить несколько указателей, звездочку необходимо ставить перед именем каждого из них.

Примеры

int *a;

float *b, *c, *d;

Указатель на void применяется в тех случаях, когда конкретный тип объекта не определен (например, в одной и той же переменной в различные моменты времени необходимо хранить адреса объектов различных типов).

Указатель может быть константой или переменной, а также указывать на константу или переменную.

Примеры

int i; // целая переменная

const int ci; // целая константа

int *pi; // указатель на целую переменную

const int *pci; // указатель на целую константу

int *const cp=&i; // указатель-константа на целую переменную

const int *const cpc=&ci; // указатель-константа на целую константу

Инициализация указателей

Указатели используют при работе с динамической памятью. Динамическая память − это свободная память, в которой можно выделять место во время выполнения программы. Доступ к выделенным участкам динамической памяти, называемым динамическими переменными, производится только через указатели. Время жизни динамических переменых − от точки создания до конца программы или до явного освобождения памяти.

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

Существуют следующие способы инициализации указателей:

1. Присваивание указателю адреса существующего объекта:

int a = 5;

int *p = &a;

int *p1(&a); // то же, что и предыдущая запись

int *r = p;

2. Присваивание указателю адреса области памяти в явном виде:

char *vp = (char*)0xD8000000;

здесь 0xD8000000 − шестнадцатеричная константа; (char*) − операция приведения типа: константа преобразуется к типу "указатель на тип char".

3. Присваивание пустого значения:

int *s = 0;

int *p = NULL;

здесь NULL − это константа-указатель, равный 0.

4. Выделение участка динамической памяти и присваивание ее адреса указателю:

int *n = new int;

int *m = new int (10); // используется операция выделения памяти

int *u = (int*) malloc (sizeof (int)); // используется функция из библиотеки С

Освобождение памяти, выделенной с помощью операции new, должно осуществляться с помощью операции delete, а памяти, выделенной функцией malloc, − с помощью функции free. При этом переменная-указатель сохраняется и может повторно быть инициализирована.

Примеры

delete n;

delete m;

free (u);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]