Обмен данными между программой и функцией, между функциями

Способы:

· Через глобальные переменные

· Через механизм параметров.

Обмен данными через глобальные переменные

Переменные, объявленные в основной программе имеют глобальное время жизни, и их называют глобальными переменными. Область действия глобальной переменной – это множество точек программы, где доступно имя переменной, а, следовательно, и ее значение. Область действия начинается от того места в программе, где определена переменная.

Переменные, объявленные в подпрограмме и ее формальные параметры – это локальные переменные. Время жизни локальной переменной начинается с момента активизации (вызова) подпрограммы и завершается по ее завершении, т.е. выделенная локальной переменной память освобождается, а значит значение этой переменной не доступно. Область действия локальной переменной: от места ее определения до конца подпрограммы, в которой эта переменная определена.

Если глобальная и локальная переменные имеют одинаковые имена и их области действия пересекаются, то во время активизации подпрограммы используется локальная переменная.

Механизм параметров

Использование глобального имени в подпрограмме затрудняет использование готовой подпрограммы в других приложениях в связи с возможным несоответствием имен.

Механизм параметров включает:

· Определение списка формальных параметров в заголовке подпрограммы

· Определение списка параметров (фактических параметров) в вызове подпрограммы

· Согласование формальных и фактических параметров по типу, порядку следования, их в списках.

 

Виды формальных параметров

Синтаксическая диаграмма определения списка формальных параметров в заголовке подпрограммы.

Параметр значение

Формат определения параметра значения.

Имя типа имя параметра

Параметр значение используется для передачи значений в функцию. Формальному параметру выделяется память в объеме указанного типа в стеке памяти. Передаваемое значение записывается в эту память, т.е. создается копия значения переданного фактического параметра.

Фактическим параметром, соответствующим может быть выражение: константа, переменная, сложное выражение.

Пример 1. Использование параметра значения

Определить среднее арифметическое трех целых чисел.

double Avg(int a, int b, int c)

{

return (a+b+c)/3;

}

int main()

{

double d=Avg(5,6,1);

 

}

Параметр указатель

Формат определения параметра указателя.

Имя типа * имя параметра

 

Параметр указатель используется для передачи в подпрограмму переменной. При этом в стеке выделяется память только для адреса переданной переменной (всего 4 байта). Так как передается переменная, то ее значение может быть изменено подпрограммой.

Такой вид параметров используется:

· для передачи переменных под результаты алгоритма, который реализует функция;

· для передачи в функцию массива;

· для передачи побочного результата функции (функция возвращает одно значение, а побочно может несколько).

Фактическим параметром, соответствующим параметру указателю может быть только адрес переменной.

 

Пример 2. Использование параметра указателя

Определить среднее арифметическое и среднее геометрическое трех целых чисел.

void crAvg_crGeom(int a, int b, int c, double *crA, double *crG)

{

*crA= (a+b+c)/3; // *crA имя ссылочной переменной

*crG=pow(a+b+c, 1/3.0);

}

int main()

{

double d,g;

crAvg_crGeom(3, 9, 8,&d, &g);// &d адрес переменной

printf(“ среднее арифметическое = %lf\n”, d);

printf(“ среднее геометрическое = %lf\n”, g);

 

}

Параметр ссылка

Формат определения параметра указателя.

Имя типа & имя параметра

Этот параметр используется в С++ для передачи в подпрограмму переменной. При этом в стеке выделяется память только для адреса переданной переменной (всего 4 байта). Так как передается переменная, то ее значение может быть изменено в функции.

Фактическим параметром, соответствующим ссылочному параметру может быть только переменная.

Пример 3. Использование параметра ссылки

Определить среднее арифметическое и среднее геометрическое трех целых чисел.

 

void crAvg_crGeom(int a, int b, int c, double &crA, double &crG)

{

crA= (a+b+c)/3; // *crA имя ссылочной переменной

crG=pow(a+b+c, 1/3.0);

}

int main()

{

double d,g;

crAvg_crGeom(3, 9, 8,d, g); // передается переменная

printf(“ среднее арифметическое = %lf\n”, d);

printf(“ среднее геометрическое = %lf\n”, g);

 

}

Замечание. Сравните код примера 2 и код примера 3. Реализация задачи в примере 3 по синтаксису проще.

 

Параметр – константа

Формат определения константного параметра

const Имя типа & имя параметра

Параметр - константа используется для передачи в функцию переменной (ссылки на нее), но значение переданного параметра изменить нельзя.

Фактическим параметром, соответствующим параметру переменной может быть только переменная.

Параметр - константа нельзя использовать в левой части оператора присваивания.

Пример 4. Использование константного параметра

void ex1(const int &a, int b, int &c)

{

c= c*a+b;

 

}

int _tmain(int argc, _TCHAR* argv[])

 

{

int b,a=20;

ex1(a,10,b);

}

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: