
- •2). Арифметические преобразования
- •1) Основные типы данных, операции и выражения
- •Билет №4
- •Билет№5
- •1). Символьные константы
- •2). Условный оператор
- •1). Операции отношения
- •1). Логические операции
- •2). Определение функции
- •Тип возвращаемого значения
- •Идентификатор или имя функции
- •Список аргументов или параметров
- •2). Вызов функции
- •Вызывающее окружение
- •1) Адресные операции
- •1). Операции над структурами и объединениями
- •2). Указатели и массивы
- •1). Операция sizeof
- •2). Перечисления
- •2). Типы переменных
2). Вызов функции
После того как создано определение функции, её можно вызвать.
int sum (int a, int b)
{
int c;
c = a + b;
return c;
}
int main()
{
int s;
s = sum(2,2); // вызов функции
cout << s;
return 0;
}
В результате выполнения программы, на экран будет выведено: 4.
Вызов функции состоит из идентификатора функции и списка аргументов в круглых скобках. Вот несколько вызовов функции sum:
int x = 5;
int y = 4;
int z;
sum(0,1); // 1
sum(x,2); // 7
sum(x,y); // 9
z = sum(x,y); // z = 9
Вызывающее окружение
То место, откуда вызывается функция, называется вызывающим окружением. Вызывающим окружением функции sum является функция main, а вызывающим окружением функции main является отладчик или операционная система.
Функция может обмениваться данными с вызывающим окружением благодаря списку аргументов и возвращаемому значению: вызывающее окружение передаёт данные в функцию с помощью аргументов, а функция передаёт данные в вызывающее окружение с помощью возвращаемого значения.
Тип передаваемого в функцию значения должен совпадать с типом указанным в списке аргументов. Нельзя, например, написать вот так:
int simple (int a)
{
return 1;
}
int main ()
{
int b;
b = simple(0.5);
return 0;
}
В списке аргументов мы указали тип int, а в функцию передаётся вещественное значение 0.5. Так делать нельзя.
Рассмотрим более полезный пример: напишем функцию для передвижения персонажа:
int x; // глобальная переменная
int move_x (int dx)
{
x = x + dx;
return x;
}
int main ()
{
int ch;
char act;
while (1)
{
act = _getch();
ch = static_cast(act);
if (ch == 75) // была нажата стрелочка влево
move_x(-1);
else if (ch == 77) // была нажата стрелочка вправо
move_x(1);
} // конец while
return 0;
} // конец main
Обратите внимание, что для тела if и else if не стоит скобочек. Скобочки ветвлений можно опускать, если в теле ветвления всего один оператор.
Функция move_x двигает персонажа на одну единицу влево или вправо в зависимости от клавиши, которую нажал пользователь.
Создадим ещё одну функцию, а заодно уберём из main часть кода:
int x; // глобальная переменная
int move_x (int dx)
{
x = x + dx;
return x;
}
void move (int ch)
{
if (ch == 75) // была нажата стрелочка влево
move_x(-1);
else if (ch == 77) // была нажата стрелочка вправо
move_x(1);
}
int main ()
{
int ch;
char act;
while (1)
{
act = _getch();
ch = static_cast(act);
move(ch); // вызов функции move
} // конец while
return 0;
} // конец main
Обратите внимание, что в функции move на месте типа возвращаемого значения стоит void, кроме того, в теле move нет оператора return.
Билет № 14
1) Адресные операции
& Операция получения адреса операнда.
Операндом может быть любое l-выражение. Операция возвращает адрес объекта или функции, на который ссылается операнд. Операция невыполнима по отношению к объектам, определённым со спецификатором register, поскольку существует вероятность того, что они не располагаются в памяти и не имеют определённого адреса.
* Операция обращения по адресу или операция косвенного обращения.
Операндом может быть выражение, значением которого является адрес. Операция косвенного обращения называется также операцией разыменования, поскольку позволяет обращаться к объекту не употребляя при этом имени объекта.
Билет № 16