Лекция: Функции с переменным числом параметров

В СИ++ допустимы функции, у которых при компиляции не фиксируется число параметров, и, кроме того может быть неизвестен тип этих параметров. Количество и тип параметров становится известным только в момент вызова, когда явно задан список фактических параметров. Каждая функция с переменным числом параметров должна иметь хотя бы один обязательный параметр. Определение функции с переменным числом параметров:

тип имя (явные параметры,... )

{тело функции }

После списка обязательных параметров ставится запятая, а затем многоточие, которое показывает, что дальнейший контроль соответствия количества и типов параметров при обработке вызова функции производить не нужно. Сложность заключается в определении начала и конца списка параметров, поэтому каждая функция с переменным числом параметров должна иметь механизм определения количества и типов параметров. Существует два подхода:

1) известно количество параметров, которое передается как обязательный параметр;

2) известен признак конца списка параметров;

Пример1

Найти среднее арифметическое последовательности чисел

//известен признак конца списка параметров

#include<iostream.h>

float sum(int k,.. .)

{

int *p=&k;//настроили указатель на параметр k

int s=0;

for(;k!=0;k--)

s+=*(++p);

return s/k;

}

void main()

{

cout<<”\n4+6=”<<sum(2,4,6);//находит среднее арифметическое 4+6

cout<<”\n1+2++3+4=”<<sum(4,1,2,3,4);//находит среднее арифметическое 1+2+3+4

}

Для доступа к списку параметров используется указатель *p типа int. Он устанавливается на начало списка параметров в памяти, а затем перемещается по адресам фактических параметров (++p).

Пример 2.

//известен признак конца списка параметров

#include<iostream.h>

int sum(int k,.. .)

{

int *p=&k;//настроили указатель на параметр k

int s=*p;//значение первого параметра присвоили s

for(int i=1;p!=0;i++)//пока нет конца списка

s+=*(++p);

return s/(i-1);

}

void main()

{

cout<<”\n4+6=”<<sum(4,6,0);//находит среднее арифметическое 4+6

cout<<”\n1+2++3+4=”<<sum(1,2,3,4,0);//находит среднее арифметическое 1+2+3+4

}

 

еще рефераты
Еще работы по информатике