"функции с переменным числом параметров"
Краткие теоретические сведения
В Си допустимы функции, у которых при компиляции не фиксируется число параметров, кроме того, может быть неизвестен и тип параметров. Количество и тип параметров становится известным только в момент вызова, когда явно задан список фактических параметров. Каждая функция с переменным числом параметров должна иметь хотя бы один обязательный параметр.
Определение функции с переменным числом параметров:
<тип><имя>(<явные параметры>, . . . )
После списка явных параметров ставится запятая, а затем многоточие, которое показывает, что дальнейший контроль соответствия количества и типов параметров при обработке вызова функции производить не нужно. Сложность заключается в определении начала и конца переменного списка параметров, поэтому каждая функция должна иметь механизм определения их количества и типов. Существует два подхода:
1) известен признак конца списка переменных параметров;
2) известно количество параметров, которое передается как обязательный параметр.
Пример:
#include <iostream.h>
int sum (int k, . . .)
{
int *p = &k; //настроили указатель на параметр k
int s=0;
for ( ; k!=0; k--)
s+=*(++p); // ++p - "перевод" указателя на следующий параметр
return s;
}
void main( )
{
cout<<”\nСумма(2,4,6)= ”<<sum(2,4,6); //находит сумму 4+6
cout<<”\nСумма(4,1,2,3,4)= ”<<sum(4,1,2,3,4); //находит сумму 1+2+3+4
}
Для доступа к списку параметров используется указатель *p типа int. Он устанавливается на начало списка параметров в памяти, а затем p перемещается по адресам фактических параметров (++p).