Latest web development tutorials

parametro variabile C

A volte si può incontrare una situazione del genere, si desidera funzionare con un numero variabile di argomenti, piuttosto che un numero predefinito di argomenti. linguaggio C per questo scenario fornisce una soluzione che permette di definire una funzione che può accettare un numero variabile di parametri in base alle esigenze specifiche. L'esempio seguente mostra la definizione di tale funzione.

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

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

Si prega di notare che la funzionefunc () un finale argomenti scritti puntini di sospensione che tre punti (...),che l'argomento prima che i puntini di sospensione è sempreint,che rappresenta il numero totale di parametri variabili da passare. Per utilizzare questa funzione, è necessario utilizzare file di intestazionestdarg.h che fornisce la funzionalità di parametri variabili per ottenere funzioni e macro.I punti specifici sono i seguenti:

  • La definizione di una funzione, l'ultimo parametro è l'ellissi, ellissi davanti parametro è sempreint, rappresenta il numero di parametri.
  • Creare una variabile di tipova_list nella definizione della funzione, questo tipo è definito nel file di intestazione stdarg.h.
  • ParametriInt e utilizzare le macro va_startper inizializzare variabiliva_listcome una lista di parametri. macro va_start stdarg.h è definita nel file di intestazione.
  • Utilizzare le macrova_arg e variabili va_listper accedere all'elenco dei parametri per ogni voce.
  • Utilizzare una macro per pulireva_end dato di memoria variabile va_list.

Seguiamo ora i passaggi precedenti per scrivere funzioni con un numero variabile di argomenti e restituisce la loro media:

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

Quando il codice di cui sopra viene compilato ed eseguito, produce il seguente risultato. Va notato che lamedia () viene chiamato due volte, ogni volta che il primo parametro rappresenta il numero totale vengono trasferiti parametri variabili.Ellissi sono utilizzati per consegnare un numero variabile di argomenti.

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