Функции с переменным числом параметров
В СИ++ допустимы функции, у которых при компиляции не фиксируется число параметров, и , кроме того может быть неизвестен тип этих параметров. Количество и тип параметров становится известным только в момент вызова, когда явно задан список фактических параметров. Каждая функция с переменным числом параметров должна иметь хотя бы один обязательный параметр. Определение функции с переменным числом параметров:
тип имя (явные параметры,. . . )
{тело функции }
После списка обязательных параметров ставится запятая, а затем многоточие, которое показывает, что дальнейший контроль соответствия количества и типов параметров при обработке вызова функции производить не нужно. Сложность заключается в определении начала и конца списка параметров, поэтому каждая функция с переменным числом параметров должна иметь механизм определения количества и типов параметров. Существует два подхода:
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
}
Дата добавления: 2015-08-26; просмотров: 521;