double A,B,V,F; |
|
B=log(z*z+y*y); |
A=sqrt(z)*B; | описание функции FF
V=A-(int)A; |
F=A*log10(z+y)+B*cos(V+z); |
return F; |
} |
Связь между фактическими и формальными параметрами
Фактические параметры определены в точке вызова функции, т. е. в обращении. Вызов функции на работу F=FF(x,y), в скобках перечислены через запятую фактические параметры – x,y.
Формальные параметры определены в заголовке описания функции –
double FF(double z, double y). В скобках после имени функции перечислены описания формальных параметров, эти параметры являются локальными,
т. е. принадлежат только функции FF.
Между фактическими и формальными параметрами существует строгое соответствие: по количеству, месту и типу.
Передача параметров в функцию:
1. передача параметра по значению. При вызове функции происходит выделение специальной области памяти (стека) под всю структуру функции и локальные переменные (в нашем примере это z,y, A,B,V,F). Значение фактического параметра передается в память выделенную под формальный , следовательно формальный параметр принимает значение фактического . В период работы функции фактические и формальные параметры занимают разные места в памяти. В приведенной программе формальный параметр z принимает значение фактического параметра x, формальный параметр y принимает значение фактического y.
2. передача параметра по адресу (указателю). В функцию передается не значение фактического параметра, а его адрес (адрес – это номер первого байта памяти, начиная с которого размещается переменная).
Формальный параметр принимает значение адреса фактического
параметра.
В языке С есть специальный тип – указатель (адрес), для его объявления используется модификатор * .
Пример объявлений указателей:
double *a,*s;
переменные a и s имеют тип указатель на переменные типа double, их значения равны адресам переменных типа double .
int *n,*i;
n, i - переменные типа указатель, они содержат адрес переменных типа
int;
int x,z; - объявление переменных типа int.
В программе для работы со значением переменной расположенной по
адресу s необходимо провести разадресацию.
*s=cos(*s); в этом примере вычисляется косинус от переменной,
расположенной по адресу s и результат помещается по адресу s;
z=*i+1; в этом примере значение переменной типа int, расположенной по адресу i увеличивается на 1, результат помешается в переменную z типа int.
Возвращение результата работы функции в точку вызова функции.
1. по оператору return ; по оператору return можно вернуть значение только одной переменной (см. программу по табулированию с использованием функции);
2. по адресам (указателям) можно вернуть сколько угодно переменных;
в теле функции, используя операцию разадресации, изменяются значения переменных расположенных в переданных адресах, следовательно при возврате в точку вызова значение переменных с указанными адресами будет новым, тем каким оно получилось в функции.
Пример использования указателя для возвращения значения переменной из функции
Формулировка задачи: вычислить сумму бесконечного ряда; вычисление суммы для каждого аргумента и заданной точности организовать в функции, вернуть значение суммы по оператору return, а число слагаемых по адресу.
Программа вычисления с использованием функции.
#include “stdafx.h”
#include <conio.h>
#include <math.h>
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.