
- •220300 - Системы автоматизированного проектирования
- •Состав языка и принцип работы компилятора языка высокого уровня
- •Идентификаторы
- •Альтернативный ввод-вывод в стиле с
- •Константы
- •Манипуляторы
- •Преобразования типов
- •Арифметические операции
- •Функции стандартной библиотеки
- •Операции отношения и логические операции
- •Базовые конструкции структурного программирования
- •Цикл с параметром (for)
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Рекомендации по программированию циклов
- •Ветвления
- •Условный оператор if
- •Вложенные конструкции
- •Проблемы соответствия if и else во вложенных ветвлениях
- •Условная операция
- •Оператор switch
- •Операторы передачи управления
- •Контрольная работа
- •Массивы
- •Сортировка массива методом выбора
- •Сортировка массива методом пузырька
- •Многомерные массивы
- •Операции со строками
- •Функции
- •Void starline(); // объявление функции (прототип)
- •Передача аргументов в функцию по значению
- •Void charline(char sim, int n); // объявление функции (прототип)
- •Возвращение функцией значения
- •Передача аргументов по ссылке
- •Возвращение значения по ссылке
- •Перегруженные функции
- •Переменные и функции
- •Передача массивов в функции
- •Указатели
- •Указатели и массивы
- •Указатели и функции
- •Указатели и строки
- •Динамический массив и динамическое выделение памяти
- •Ввод/вывод
- •Форматированный ввод/вывод
- •Конструкторы и методы
- •Двоичный ввод/вывод. Бинарные файлы
- •Двунаправленный ввод/вывод
- •Функции стандартной библиотеки для работы с файлами или ввод/вывод в стиле с
Передача аргументов в функцию по значению
Аргументом называют единицу данных, передаваемую программой в функцию. Аргументы позволяют функции оперировать различными значениями или выполнять различные действия в зависимости от переданных ей значений.
В качестве примера рассмотрим следующую ситуацию. Пусть нам необходимо сделать функцию starline() более гибкой, т.е. чтобы она выводила не фиксированное, а любое заданное количество символов. В качестве аргументов для функции будем использовать символ и число раз, которое данный символ будет выведен на экран.
#include <iostream>
#include <conio>
using namespace std;
Void charline(char sim, int n); // объявление функции (прототип)
int main() {
charline('-', 43); // вызов функции (не указывается тип возвращаемого значения)
cout << "Tip dannyh Diapazon" << endl;
charline('=', 33); // вызов функции
cout << "char -128...127" << endl
<< "short -32,768...32,767" << endl
<< "int Systemno-zavisim." << endl
<< "long -2,147,483,648...2,147,483,647" << endl;
charline('-', 43); // вызов функции
getch(); return 0;
}
//------------------определение функции starline()
void charline(char sim, int n) { // заголовок функции
for(int j=0; j<n; j++ ) cout << sim; // тело функции
cout << endl; // тело функции
}
Данный пример демонстрирует механизм передачи аргументов в функцию (например, '-' и 43). Переменные, используемые внутри функции для хранения значений аргументов, называются параметрами. В функции charline() в качестве параметров выступают переменные sim и n. Из примера видно, что параметры используются внутри функции так же, как обычные переменные.
В приведённом примере роль аргументов выполняли константы: '-', 43 и т.д. Теперь давайте рассмотрим пример, в котором вместо констант в функцию будут передаваться значения переменных.
…
void charline(char sim, int n); // объявление функции (прототип)
int main() {
char Simv;
int N;
cout << "Vvedite simvol: "; cin >> Simv;
cout << "Vvedite chislo povtoreniy simvola: "; cin >> N;
charline(Simv, N); // вызов функции
getch(); return 0;
}
//------------------определение функции charline()
void charline(char sim, int n) { // заголовок функции
for(int j=0; j<n; j++ ) cout << sim; // тело функции
cout << endl; // тело функции
}
В этой программе переменные Simv и N передаются в качестве аргументов в функцию charline(). Переменные sim и n инициализируются переданными в функцию значениями. Обратите внимание на то, что имена, указываемые в прототипе функции, никак не связаны с именами переменных, передаваемых в качестве аргументов при вызове функции. Напомню ещё раз, что типы переменных, используемых в качестве аргументов функции, должны совпадать с типами, указанными в объявлении и определении функции.
Способ передачи аргументов, при котором функция создаёт копии передаваемых значений, называется передачей аргументов по значению. При передаче по значению в стек заносятся копии значений аргументов, и операторы функции работают с этими копиями. Доступа к исходным значениям параметров у функции нет, а, следовательно, нет и возможности их изменить.