Форум программистов, компьютерный форум CyberForum.ru

Функция с переменным числом параметров - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создание строк http://www.cyberforum.ru/cpp/thread36802.html
Строка символов представляет собой предложение, написанное на русском языке. Предложение заканчивается точкой. Подсчитать и вывести количество различных букв, которые входят в это предложение. Ответ должен приводиться в грамматически правильной форме, например: а – 25 раз, к – 3 раза и т.д
C++ Проверка выделена ли память под указатель Уважаемые программисты!!!!! подскажите пожалуйста можно ли каким-либо способом проверить в условном операторе, выделена ли память под указатель я пытался делать так: if (ptr == NULL) { ptr = new ...//дальше выделяется память } но в этом случае выбрасывалось исключение типа access violation reading location типа того.. что мне делать скажите плиз!!! http://www.cyberforum.ru/cpp/thread36721.html
C++ Массивы, сортировка
Люди помогите сделать єто задание: Лабораторна робота №2 Тема – алгоритмізація і програмування процесів обробки масивів. Мета – набуття навичок використання у текстах програм мовами програмування С та С++ масивів та покажчиків розміщення даних у пам’яті ЕОМ. Завдання на виконання лабораторної роботи складається з двох частин. 1 частина – алгоритмізація і програмування процесів обробки...
Присвоение значения указателю на функцию C++
Есть укзатель на функцию. Есть перегруженная функция. как присвоить указателю нужный нам вариант этой перегруженной функции?
C++ C++ и eclipse http://www.cyberforum.ru/cpp/thread36370.html
Приветствую! Кто-нибудь пробовал "подружить" С++ со средой eclipse ? Интересны мнения. Скачал некоторое время назад плагин CDT (C++ Development Tools) для eclipse, скачал бесплатный компилятор cygwin. Вроде бы подружил и с компилятором, и с отладчиком. Но есть подозрения, что я не все уголки "спилил напильником". Если кто-то работал - поделитесь ЛИЧНЫМ опытом работы в этой среде (имеется...
C++ Вычисление в одномерном массиве Доброе время суток! Помогите плиз с этим делом В одномерном массиве,состоящем из n вещественных элементов,вычислить: 1)максимальный по модулю элемент массива 2)сумму элементов массива,расположенных так,чтобы элементы,равные нулю распологались после остальных Если можно,код программы от и до. Заранее благодарю подробнее

Показать сообщение отдельно
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
28.05.2009, 06:36     Функция с переменным числом параметров
Программист может разрабатывать свои функции с переменным числом параметров. Для обеспечения удобного способа доступа к аргументам функции с переменным числом параметров имеются три макроопределения (макросы) va_start, va_arg, va_end, находящиеся в заголовочном файле stdarg.h. Эти макросы указывают на то, что функция, разработанная пользователем, имеет некоторое число обязательных аргументов, за которыми следует переменное число необязательных аргументов. Обязательные аргументы доступны через свои имена как при вызове обычной функции. Для извлечения необязательных аргументов используются макросы va_start, va_arg, va_end в следующем порядке.

Макрос va_start предназначен для установки аргумента arg_ptr на начало списка необязательных параметров и имеет вид функции с двумя параметрами:

void va_start(arg_ptr,prav_param);

Параметр prav_param должен быть последним обязательным параметром вызываемой функции, а указатель arg_prt должен быть объявлен с предопределением в списке переменных типа va_list в виде:

va_list arg_ptr;

Макрос va_start должен быть использован до первого использования макроса va_arg.

Макрокоманда va_arg обеспечивает доступ к текущему параметру вызываемой функции и тоже имеет вид функции с двумя параметрами

type_arg va_arg(arg_ptr,type);

Эта макрокоманда извлекает значение типа type по адресу, заданному указателем arg_ptr, увеличивает значение указателя arg_ptr на длину использованного параметра (длина type) и таким образом параметр arg_ptr будет указывать на следующий параметр вызываемой функции. Макрокоманда va_arg используется столько раз, сколько необходимо для извлечения всех параметров вызываемой функции.

Макрос va_end используется по окончании обработки всех параметров функции и устанавливает указатель списка необязательных параметров на ноль (NULL).

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

Пример:

#include
int main()
{ int n;
int sred_znach(int,...);
n=sred_znach(2,3,4,-1);
/* вызов с четырьмя параметрами */
printf("n=%d",n);
n=sred_znach(5,6,7,8,9,-1);
/* вызов с шестью параметрами */
printf("n=%d",n);
return (0);
}
int sred_znach(int x,...);
{
int i=0, j=0, sum=0;
va_list uk_arg;
va_start(uk_arg,x); /* установка указателя uk_arg на */
/* первый необязятельный параметр */
if (x!=-1) sum=x; /* проверка на пустоту списка */
else return (0);
j++;
while ( (i=va_arg(uk_arg,int))!=-1)
/* выборка очередного */
{ /* параметра и проверка */
sum+=i; /* на конец списка */
j++;
}
va_end(uk_arg); /* закрытие списка параметров */
return (sum/j);
}
Так.
Для вашей задачи достаточно поменять последнюю строку на
C++
1
return (sum);
 
Текущее время: 19:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru