Способ передачи параметров
В Си принят единый способ передачи параметров, который называется ПЕРЕДАЧЕЙ ПО ЗНАЧЕНИЮ. Выглядит он так:
-формальные параметры являются собственными переменными функции;
-при вызове функции происходит присваивание значений фактических параметров формальным (копирование первых во вторые);
-при изменении формальных параметров значения соответствующих им фактических параметров не меняются.
Естественно, что предлагаемое здесь начальное представление условно и даже в некоторой степени наивно. Но оно тем не менее отражает суть способа, который мы проиллюстрируем программным эквивалентом:
.
int f(int n1,int n2) // Эквивалент
int n1,n2 ,rez_f;
void f()
{ {
int i,j; int i,j;
... ...
n1 ++; n1 ++;
n2 = n1; n2 = n1;
return n2; rez_f = n2;
... ...
} }
int m=2; int m=2;
void main() void main()
{ {
int z; int z;
z = f( m,3); n1 = m; n2 = 3; f(); z = rez_f;
} }
Единственным исключением из этого правила является передача имени массива в качестве параметра. В этом случае формальный параметр также является собственной переменной, но не массивом, а указателем на него. Поэтому размерность такого массива в функции несущественна и может отсутствовать, а изменение элементов массива - формального параметра приводит к изменению значений массива -фактического параметра функции:
int sum(int s[], int n) // Сумма элементов массива
int z; // Размерность передается
{ int i; // отдельным параметром
for (i=0,z=0; i<n; i++) z += s[i];
return(z); }
int c[10] = {1,6,4,7,3,56,43,7,55,33};
void main()
{ int nn; nn = sum(c,10); }
В этом случае формальный параметр как бы " отображается" на соответствующий фактический и такой способ передачи параметров носит название передача параметра по ссылке. В Си++ имеется специальный синтаксис для передачи по ссылке любых формальных параметров.