Latest web development tutorials
×

C курс

C Язык учебника C Краткое введение C параметры окружающей среды C Структура программы C Базовый синтаксис C Типы данных C переменная C постоянная C Storage Class C операторы C судья C циркуляция C функция C Обзорное правила C массив C указатель C строка C структура C союз C поле Bit C typedef C Входной и Выходной C грамотность документов C препроцессор C заголовок C Слепки C Обработка ошибок C Рекурсия C Переменный параметр C Управление памятью C Параметры командной строки C Классические 100 случаев

C Стандартная библиотека

C Стандартная библиотека - справочное руководство C Стандартная библиотека - <assert.h> C Стандартная библиотека - <ctype.h> C Стандартная библиотека - <errno.h> C Стандартная библиотека - <float.h> C Стандартная библиотека - <limits.h> C Стандартная библиотека - <locale.h> C Стандартная библиотека - <math.h> C Стандартная библиотека - <setjmp.h> C Стандартная библиотека - <signal.h> C Стандартная библиотека - <stdarg.h> C Стандартная библиотека - <stddef.h> C Стандартная библиотека - <stdio.h> C Стандартная библиотека - <stdlib.h> C Стандартная библиотека - <string.h> C Стандартная библиотека - <time.h>

С переменным параметром

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

int func(int, ... ) 
{
   .
   .
   .
}

int main()
{
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

Обратите внимание , что функцияFUNC () окончательное письменных аргументов Ellipsis , что три точки (...),что аргумент перед многоточием всегдаINT,представляющее общее число переменных передаваемых параметров. Чтобы использовать эту функцию, вам нужно использоватьstdarg.h файл заголовка , который обеспечивает функциональные возможности переменных параметров для достижения функций и макросов.Конкретные шаги заключаются в следующем:

  • Определение функции, последний параметр многоточие, многоточие перед параметром всегдаINT, представляет количество параметров.
  • Создайте переменную типаva_list в определении функции, этот тип определен в файле заголовка stdarg.h.
  • Int параметры и использование макросов va_startдля инициализации переменнойva_listкак список параметров. Stdarg.h va_start макрос определен в файле заголовка.
  • Используйтеva_arg макросы и va_listпеременные для доступа к списку параметров для каждого элемента.
  • Используйте макрос для очисткиva_end данную va_listпеременную памяти.

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

#include <stdio.h>
#include <stdarg.h>

double average(int num,...)
{

    va_list valist;
    double sum = 0.0;
    int i;

    /* 为 num 个参数初始化 valist */
    va_start(valist, num);

    /* 访问所有赋给 valist 的参数 */
    for (i = 0; i < num; i++)
    {
       sum += va_arg(valist, int);
    }
    /* 清理为 valist 保留的内存 */
    va_end(valist);

    return sum/num;
}

int main()
{
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}

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

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000