Latest web development tutorials

C معلمة متغير

في بعض الأحيان قد تواجه مثل هذه الحالة، وتريد أن تعمل مع عدد متغير من الوسائط، بدلا من عدد محدد مسبقا من الحجج. لغة C لهذا السيناريو يوفر الحل الذي يسمح لك لتحديد وظيفة التي يمكن أن تقبل عدد متغير من المعلمات وفقا للاحتياجات المحددة. يوضح المثال التالي تعريف هذه الوظيفة.

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

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

يرجى ملاحظة أنظائفها وظيفة ()الحجج الخطية النهائية القطع أن ثلاث نقاط(...)،هذه الحجة قبل القطع هي دائماكثافة العمليات، وهو مايمثل العدد الإجمالي للمعلمات متغير لتمريرها. لاستخدام هذه الميزة، تحتاج إلى استخدام ملف رأسstdarg.h التي توفر وظائف المعلمات المتغير لتحقيق وظائف وحدات الماكرو.خطوات محددة هي كما يلي:

  • تعريف وظيفة، المعلمة الأخيرة هي القطع، القطع أمام المعلمة دائماكثافة، وتمثل عدد من المعلمات.
  • إنشاء متغير نوعva_list في تعريف الدالة، ويعرف هذا النوع في stdarg.h ملف الرأس.
  • المعلماتكثافة العمليات وحدات الماكرو استخدام va_startتهيئة المتغيرva_listكقائمة المعلمة. ويعرف ماكرو va_start Stdarg.h في ملف الرأس.
  • استخدام وحدات الماكرو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