Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по C/C++

  Все выпуски  

Уроки по C/C++


Информационный Канал Subscribe.Ru

Уроки по C/C++. Рассылки сайта progs.biz  
Начало > C++ > Основы C++ > Урок 33

Разработка Windows-приложений на Visual Basic.NET и C#.NET.
Разработка Windows-приложений на Visual Basic.NET и  C#.NET
Заказать на Озоне


Полные версии уроков (с картинками): урок 33.

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

Вот пример функции, принимающий переменное число параметров.

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

#include <iostream.h>
// Задаем функцию с переменным числом параметров.
int sum(int n, ...)    
{
    // Получаем адрес первого параметра.
    int *p = &n;
    // Переводим указатель на второй параметр.
    p++;
    // Объявляем переменную для суммы
    // и присваиваем ей ноль.
    int res = 0;
    // Сумирование оставшихся параметров.
    for(int i=0; i<n; i++){
        // Добавление к сумме очередного параметра.
        res+=(*p);
        // Первод указателя на следующий параметр.
        p++;
    }
    // Возврат суммы.
    return res;
}

void main(){
    int r = 0;
    // Суммируем 5 чисел.
    r = sum(5, 1, 2, 3, 4, 500);
    cout<<"Sum = "<<r<<"\n";
}

Переменное число параметров в функции обозначаается посредством многоточия (...). В нашем объявлении функции мы указываем, что обязотельно должен присутствовать первый параметр (типа int), после которого может быть любое число параметров любого типа.

Внутри функция устроена так - мы получаем адрес в адресном пространстве, по которому расположены передаваемые в функцию параметры. Это адрес первого параметра:

  ...
  int *p = &n;
 ...

Далее мы перебираем все параметры (а всего их n) через указатель - он постоянно переводится на следующий параметр посредством строки:

  ...
  p++;
 ...

Результатом выполнения указанного фрагмента будет 510.

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX new!
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
2002-2004 сайт progs.biz
2002-2004 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cpplessons
Отписаться

В избранное