Latest web development tutorials

parámetro variable C

A veces puede encontrarse con una situación de este tipo, que desea funcionar con número variable de argumentos, en lugar de un número predefinido de argumentos. lenguaje C para este escenario ofrece una solución que permite definir una función que puede aceptar un número variable de parámetros de acuerdo a las necesidades específicas. El siguiente ejemplo demuestra la definición de una función de este tipo.

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

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

Tenga en cuenta que la funciónfunc () a finales argumentos escritos elipsis tres puntos (...),que el argumento antes de la elipsis es siempreint,que representa el número total de parámetros variables para ser aprobada. Para utilizar esta función, es necesario utilizar el archivo de cabecerastdarg.h que proporciona la funcionalidad de los parámetros variables para lograr funciones y macros.Los pasos específicos son los siguientes:

  • La definición de una función, el último parámetro es la elipsis, la elipsis delante del parámetro siempre esint, representa el número de parámetros.
  • Crear una variable de tipova_list en la definición de función, este tipo está definido en el archivo de cabecera stdarg.h.
  • Int parámetros y utilizar macros va_startpara inicializar la variableva_listcomo una lista de parámetros. macro va_start stdarg.h se define en el archivo de cabecera.
  • Va_arg usar macros y variables va_listpara acceder a la lista de parámetros para cada elemento.
  • Utilice una macro para limpiarva_end dada memoria de variables va_list.

Vamos ahora a seguir los pasos anteriores para escribir funciones con un número variable de argumentos y devuelve su promedio:

#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));
}

Cuando el código se compila y ejecuta, se produce el siguiente resultado. Cabe señalar que elpromedio de la función ()se llama dos veces, cada vez que el primer parámetro representa el número total se transfieren parámetros variables. Los puntos suspensivos se utilizan para entregar un número variable de argumentos.

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