Операции работы с указателями.

&x – взятие адреса

*x – разыменовывание указателя

Укороченные операции:

x+=a – тоже, что и x=x+a

аналогично определены операции x-=a, x*=a, x/=a, x%=a, x&=a, x|=a, x^=a, x<<=a, x>>=a.

Инкремент и декремент

++x, --x – x увеличивается или уменьшается на 1, затем используется в выражении.

x++ ,x-- – предыдущее значение x используется в выражение, а затем увеличивается/уменьшается на 1.

Пример (в каждом примере изначально x=3):

(++x)+6 → 10, (x++)+6 → 9 (в обоих случаях в результате x=4)

(++x) + (++x) → 9

(x++) + (x++) → 7

Операция ","

возвращает крайнее правое значение.

Пример (объявлены целые переменные x,x1,x2,x3):

x = (x1=4+6, x2=x1-2, x3=x2+7)

В результате: x1=10, x2=8, x3=15, x=15.

Операция "?:"

x?a:b - возвращает a, если х истинно, иначе возвращает b.

Пример:

(5>2?4:6) → 4, (8<3?5:9) → 9, 5+(7>3?5:2) → 10

Операция sizeof(тип_данных/имя_переменной).

Возвращает размер (в байтах), занимаемый данной переменной или типом данных.

sizeof(short) → 2

Операторы ветвления и цикла

If

if (условие) действие1;

else действие2;

Если условие истинно, выполняется действие1, иначе выполняется действие2. Секция else необязательна.

While

while (условие) действие;

Цикл с предусловием. Действие выполняется, пока условие истинно.

Есть также цикл с постусловием:

do действие while (условие);

For

Цикл for выглядит следующим образом и в общем случае не является циклом с заданным числом повторений (в отличие, например, от ЯВУ Pascal).

for (инициализация; условие_цикла; изменение_переменых) действие;

Например,

for (x=0;x<10;x++) a+=f(x);

Break

Оператор break используют для выхода из циклов for / while и ветвления switch. Для вложенных циклов выход осуществляется на один уровень.

Continue

Данный оператор вызывает принудительный переход к следующей итерации цикла. Например, требуется сложить все целые числа от a до b не кратные трём.

for(int i=a, s=0; i<b; i++)

{

if (i%3==0) continue; //переходим к следующему значению i

s+=i;

}

Switch

Структура записи оператора switch следующая.

switch(переменная)

{

case значение1: набор_действий1; break;

case значение2: набор_действий2; break;

default: набор_действий_по_умолчанию;

}

При равенстве переменной «значению1», выполняется соответствующий набор действий, который может состоять из нескольких операторов и заканчивается словом break. При несовпадении ни с одним из значений, выполняется секция default.

Формально, секции «case …: » являются метками, на которые осуществляется переход при совпадении значений. Именно поэтому после перехода на метку выполняются все команды до конца секции switch-case либо до оператора break. Этим можно пользоваться для уменьшения дублирования кода. Например, пусть задано условие: если переменная x равна 0, то вызвать функцию f1(), а если равно 2, то вызвать f1() и f2().

switch(x)

{

case 2: f2(); //не используем break, т.к. требуется выполнение и следующей команды.

case 0: f1(); //не используем break, т.к. дошли до конца.

}

Функции

Объявляются следующим образом:

возвращаемый_тип имя_функции(список_формальных_параметров)

{

ТЕЛО ФУНКЦИИ

}

список формальных параметров представляет собой перечисление через запятую пар «тип данного» – «имя переменной» (имя переменной может отсутствовать).

Для функции, которая не возвращает значения (процедура в Паскале), предусмотрен тип данных void.

Функции, возвращающие значение, должны обязательно содержать оператор "return возвращаемые_данные". На данном операторе происходит возврат из функции независимо от того, есть ли дальше другие операторы.

Пример.

int sum(int x, int y)

{

return x+y;

}

Для функций типа void можно использовать return без аргументов для явного выхода из функции в требуемом месте.

Описание функции обязательно должно быть раньше (выше) в тексте программы, чем любой её вызов. Функция может быть описана без реализации (упреждающее описание). В этом случае тело функции не записывают, а после описания её заголовка ставят «;». Также при упреждающем описании могут не указываться имена переменных.

Пример:

void myfunc(int, int);

// здесь продолжение кода с вызовом myfunc

void myfunc(int x, int y) {…}

Допустимо явно не указывать параметры функции, для этого используется многоточие в конце списка параметров. В этом случае компилятор контролирует только явно указанные аргументы. Никаких специальных средств по работе с неявно указанными параметрами функции языки «С» и «С++» не предоставляют, но известно, что переданные фактические параметры располагаются в памяти последовательно после явно указанных.

Языки «С» и «С++» разрешают использование рекурсии, то есть вызова функцией самой себя.

Пример (функция вычисления факториала):

long fact(int k)

{

if (k<0) return 0;

if (k==0) return 1;

return k*fact(k-1);

}

Язык «С++» предоставляет дополнительные возможности:

– перегрузка функций – несколько функций могут иметь одно имя и тип, но разный набор формальных аргументов, в этом случае компилятор сам выбирает подходящую функцию по фактическим аргументам;

– параметры по умолчанию;

– подставляемые (inline) функции.








Дата добавления: 2015-11-04; просмотров: 637;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.009 сек.