Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
s__ekzamen.docx
Скачиваний:
7
Добавлен:
18.12.2018
Размер:
113.34 Кб
Скачать

12. Инструкция перехода.

При выполнении оператор перехода происходит безусловная передача управления в некоторую точку программы. Существует четыре таких оператора: break, continue, goto и return.

Операторы break Синтаксис следующий:break;

Оператор break можно использовать только внутри операторов итерации (while, do и for - циклы) или с оператором switch. Он прекращает выполнение итерации или оператора switch. Поскольку операторы итерации и оператор switch могут комбинироваться и иметь любую глубину вложенности, следует обращать особое внимание на то, чтобы оператр break выполнял выход именно из нужного цикла или оператора switch. Правило состоит в том, что оператор break заканчивает выполнение ближайшего к нему объемлющего цикла итерации или оператора switch.

Операторы continue

Синтаксис следующий:

continue;

Оператор continue может быть использован только внутри оператора итерации; он передает управление на проверку условия циклов while и do, либо на выражение инкремента цикла for.

При вложенности циклов итерации оператор continue считается принадлежащим ближайшей объемлющей итерации

Операторы goto Синтаксис следующий:

goto метка;

Оператор goto передает управление оператору, имеющему указанную "метку" (См. Операторы-с-метками), который должен находиться в пределах той же функции.

С++: В С++ допустимо обойти объявление с явным или неявным инициализатором, если это объявление не находится во внутреннем блоке, который также обходится.

Операторы return

Если тип возврата функции не равен void, то тело функции должно содержать как минимум один оператор return следующего формата:

return выражение-возврата;

где выражение-возвратадолжно быть типа type или типа, преобразуемого к типу, заданному type, при присвоении. Значение выражениявозврата и есть значение, возвращаемое данной функцией. Выражение, вызывающее функцию, вида func(список-действительных-аргументов) является значением rvalue типа type, а не именующим (lvalue) значением.

Выполнение вызова функции заканчивается, когда встретился оператор return; если оператор return отсутствует, то выполнение "проваливается" к последней закрыващей фигурной скобке тела функции.

Если тип возврата void, то оператор return можно записать как:

{...return;}

13. Указатели. Операции над указателями. Косвенная адресация.

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

Код, который вы ввели, объявляет три целых переменных:

int iNum1;

int iNum2 ;

int iResult;

Затем объявляются еще две переменные:

int* pNum1;

int* pNum2;

Обратите внимание, что в объявлении использована запись int*. К какому же типу относится переменная pNum1? Можете ли вы сохранить целое значение в pNum1? Нет. В pNum1 вы можете сохранить адрес переменной типа int. Вы должны сохранить в переменной pNum1 число 1000, поскольку 1000 является адресом iNum1. Точно так же вы должны сохранять адрес целого значения и в переменной pNum2. После этого вы присваиваете значения переменным iNum1 и iNum2:

iNum1 = 2;

iNum2 = 2;

Затем вы присваиваете значения переменным pNumI и pNum2:

pNum1 = &iNum1;

pNum2 = &iNum2;

Эти два оператора сохраняют адрес переменной iNum1 в pNum1 и адрес iNum2 в pNum2. Далее вам нужно вычислить результат сложения iNum1 с iNum2. Вы могли бы бы просто написать оператор

iResult = iNum1 + iNum2;

Однако попробуем выполнить вычисления, применив указатели, а не переменные. Например, чтобы вычислить результат сложения iNuml и iNum2, вы пишете следующий оператор:

iResult = *pNum1 + *pNum2;

Операции над указателями

|ptr1= =ptr2 |Сравнение на "равенство"

| ptr1 != ptr2 |Сравнение на "неравенство"

| Ptr1< ptr2 |Сравнение на "меньше"

|рtr1<= ptr2 |Сравнение на "меньше или равно" |

| Рtr1> ptr2|Сравнение на "больше"

|ptr1>= ptr2 | Сравнение на "больше или равно" |

|ptr1 - ptr2 |Вычисление числа элементов массива между ptr1 и ptr2. |

|ptr1+ int_val |Вычисление указателя , отстоящего от ptr1на "вверх”

|ptr1 - int_val |Вычисление указателя , отстоящего от ptr1 на int_val вниз |

|ptr1++ (++ptr1) |Увеличение значения указателя на единицу |

|ptr1-- (--ptr1) |Уменьшение значения указателя на единицу

Косвенная адресация

int x=*y;

Для того чтобы обратиться к объекту, имея его адрес, нужно применить операцию разыменования, или косвенную адресацию , обозначаемую звездочкой (*). Имея следующие определения переменных:

int ival = 1024;, ival2 = 2048;

int *pi = &ival;

мы можем читать и сохранять значение ival, применяя операцию разыменования к указателю pi:

// косвенное присваивание переменной ival значения ival2

*pi = ival2;

// косвенное использование переменной ival как rvalue и lvalue

*pi = abs(*pi); // ival = abs(ival);

*pi = *pi + 1; // ival = ival + 1;

Когда мы применяем операцию взятия адреса (&) к объекту типа int, то получаем результат типа int*

int *pi = &ival;

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