Latest web development tutorials

C variabel parameter

Kadang-kadang Anda mungkin menghadapi situasi seperti ini, Anda ingin berfungsi dengan variabel jumlah argumen, daripada nomor yang telah ditetapkan argumen. bahasa C untuk skenario ini menyediakan solusi yang memungkinkan Anda untuk menentukan fungsi yang dapat menerima sejumlah variabel parameter sesuai dengan kebutuhan spesifik. Contoh berikut menunjukkan definisi fungsi seperti.

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

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

Harap dicatat bahwa fungsifunc () sebuah argumen tertulis akhir elipsis yang tiga titik (...),bahwa argumen sebelum elipsis selaluint,mewakili jumlah total parameter variabel harus dilalui. Untuk menggunakan fitur ini, Anda harus menggunakan file headerstdarg.h yang menyediakan fungsi parameter variabel untuk mencapai fungsi dan macro.langkah-langkah spesifik adalah sebagai berikut:

  • Definisi fungsi, parameter terakhir adalah elipsis, elipsis di depan parameter selaluint, mewakili jumlah parameter.
  • Buat variabel jenisva_list dalam definisi fungsi, jenis ini didefinisikan dalam stdarg.h file header.
  • parameterint dan penggunaan macro va_startuntuk menginisialisasi variabelva_listsebagai daftar parameter. Stdarg.h va_start makro didefinisikan dalam file header.
  • Menggunakan macrova_arg dan variabel va_listuntuk mengakses daftar parameter untuk setiap item.
  • Menggunakan makro untuk membersihkanva_end diberikan variabel memori va_list.

Mari kita ikuti langkah-langkah di atas untuk menulis fungsi dengan variabel jumlah argumen dan mengembalikan rata mereka:

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

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut. Perlu dicatat bahwa fungsirata-rata () disebut dua kali, setiap kali parameter pertama mewakili jumlah total yang ditransfer parameter variabel.Elips digunakan untuk menyampaikan sejumlah variabel argumen.

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