English 中文(简体)
C - 可变的颜色
  • 时间:2024-12-22

C - Variable Arguments


Previous Page Next Page  

有时,当你想起某种功能时,你可能会遇到这样的情况,而这种作用可能产生不同的论据,即参数,而不是预先确定的参数。 C方案拟订语言为这种情况提供了解决办法,并允许你确定一个能够根据你的要求接受数量不等的参数的职能。 以下例子说明了这种职能的定义。

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

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

应当指出,职能func() 其最后的论点是,即三个狗(.)。 而此前的智慧总是int,这将是通过的所有可变论点。 为了使用这种功能,您需要使用stdarg.h。 提供职能和宏观工具的主编文件,以落实不同论点的功能并遵循既定步骤——

    用其最后参数确定一项功能,即作为智慧,在信息之前,其功能总是int,代表争论的数量。

    创建va_pst 功能定义中的类型变量。 在编队长档案中界定了这种类型。

    初步确定理由清单中的va_pst变量宏观。 宏观启动在编队长档案中界定。

    使用va_arg 宏观和va_pst 出入理由清单中每一项目的变量。

    利用宏观va_end清理分配给va_pst变量的记忆。

现在,让我们采取上述步骤,并写下一个简单的功能,可以计算变量数,回去平均数——

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

double average(int num,...) {

   va_pst vapst;
   double sum = 0.0;
   int i;

   /* initiapze vapst for num number of arguments */
   va_start(vapst, num);

   /* access all the arguments assigned to vapst */
   for (i = 0; i < num; i++) {
      sum += va_arg(vapst, int);
   }
	
   /* clean memory reserved for vapst */
   va_end(vapst);

   return sum/num;
}

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

如果上述法典得到编纂和执行,则会产生以下结果。 应当指出,“average()”这一功能两次被称作“,每次第一次辩论都是通过的各种论点的总数。 只有智慧才能通过不同的论据。

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