Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Параметры функции
Механизм параметров является основным способом обмена информацией между вызываемой и вызывающей функциями. Параметры, перечисленные в заголовке описания функции, называются формальными параметрами, а записанные в операторе вызова функции – фактическими. Существует два способа передачи параметров в функцию: по значению и по адресу. При передаче по значению доступа к исходным значениям параметров у функции нет, а, следовательно, нет возможности их изменить. При передаче по адресу функция осуществляет доступ к ячейкам памяти по этим адресам и может изменить исходные значения аргументов. Пример #include < iostream.h> void f (int i, int *j, int & k); int main() { int i =1, j=2, k=3; cout< < ”i j k\n”; cout< < i< < ’ ‘< < j< < ’ ‘< < k< < ’\n’; f(i, & j, k); cout< < i< < ’ ‘< < j< < ’ ‘< < k< < ’\n’; return 0; } void f (int i, int *j, int & k) { i++; (*j)++; k++; } Результат работы программы: i j k 1 2 3 1 3 4 Первый параметр (i) передается по значению. Его изменение в функции не влияет на исходное значение. Второй параметр (j) передается по адресу с помощью указателя. Третий параметр (k) по адресу с помощью ссылки. При передаче по ссылке в функцию передается адрес указанного при вызове параметра, а внутри функции все обращения к параметру неявно разыменовываются. Если требуется запретить изменение параметра внутри функции, используется модификатор const.
Передача массивов в качестве параметров При использовании в качестве параметра массива в функцию передается указатель на первый его элемент, т.е. массив всегда передается по адресу. При этом информация о количестве элементов массива теряется и следует передавать его размерность через отдельный параметр. Пример Необходимо найти сумму элементов массива. Нахождение суммы оформить в виде функции. #include < iostream.h> int sum(const int* mas, const int n); int const n=10; main() { int a[n]={3, 4, 5, 4, 4}; cout< < " Summa= " < < sum(a, n); } int sum(const int* mas, const int n) { //варианты: int sum(int mas[], int n) // int sum(int mas[n], int n)
int s=0; for (int i=0; i< n; i++) s+=mas[i]; return s; } Пример Необходимо найти сумму элементов матрицы. Нахождение суммы оформить в виде функции. #include < iostream.h> #include < conio.h> int sum(const int** matr, const int n, const int m); main() { clrscr(); const n=2, m=2; int **a; for (int i=0; i< n; i++) for (int j=0; j< m; j++) cin> > a[i][j];
cout< < " Summa= " < < sum(a, n, m); }
int sum(const int** matr, const int n, const int m) { int s=0; for (int i=0; i< n; i++) for (int j=0; j< m; j++) s+=matr[i][j]; return s; }
|