Способы:
· Через глобальные переменные
· Через механизм параметров.
Обмен данными через глобальные переменные
Переменные, объявленные в основной программе имеют глобальное время жизни, и их называют глобальными переменными. Область действия глобальной переменной – это множество точек программы, где доступно имя переменной, а, следовательно, и ее значение. Область действия начинается от того места в программе, где определена переменная.
Переменные, объявленные в подпрограмме и ее формальные параметры – это локальные переменные. Время жизни локальной переменной начинается с момента активизации (вызова) подпрограммы и завершается по ее завершении, т.е. выделенная локальной переменной память освобождается, а значит значение этой переменной не доступно. Область действия локальной переменной: от места ее определения до конца подпрограммы, в которой эта переменная определена.
Если глобальная и локальная переменные имеют одинаковые имена и их области действия пересекаются, то во время активизации подпрограммы используется локальная переменная.
|
|
Механизм параметров
Использование глобального имени в подпрограмме затрудняет использование готовой подпрограммы в других приложениях в связи с возможным несоответствием имен.
Механизм параметров включает:
· Определение списка формальных параметров в заголовке подпрограммы
· Определение списка параметров (фактических параметров) в вызове подпрограммы
· Согласование формальных и фактических параметров по типу, порядку следования, их в списках.
Виды формальных параметров
Синтаксическая диаграмма определения списка формальных параметров в заголовке подпрограммы.
Параметр значение
Формат определения параметра значения.
Имя типа имя параметра
Параметр значение используется для передачи значений в функцию. Формальному параметру выделяется память в объеме указанного типа в стеке памяти. Передаваемое значение записывается в эту память, т.е. создается копия значения переданного фактического параметра.
Фактическим параметром, соответствующим может быть выражение: константа, переменная, сложное выражение.
Пример 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);
}