c语言接收可变参数

版权声明:本文全部是胡说八道,如果你喜欢,可随意转载 https://blog.csdn.net/robinsongsog/article/details/80427514

也许某些时候, 你遇到这种情况,希望设计一个函数,可以接受的参数个数

是变化的,就是说它的参数个数,不是预先定义好的, C语言提供了一种方案

可以实现一个函数,接受可变参数。

下面例子,展现一个这样的例子:


int fun(int, ...){
	
}

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

注意,func 最后一个参数是省略号,就是 (...) , 省略号前面,必须是一个int ,

用来表示传入参数的个数。如果你想使用这个功能,需要include stdarg.h 这个

头文件,并按如下规则去做:

  • 定义一个函数,它的最后一个参数是省略号,并且省略号之前的参数是int, 用以表示参数的个数。
  • 创建 va_list 类型的变量
  • 使用int 参数 各va_start 去初始化参数列表
  • 使用va_arg 和va_list 去访问参数列表中的每一个参数。
  • 使用va_end 去free 掉va_list 所占用的内存
#include <stdio.h>
#include <stdarg.h>

double average(int num,...){
	va_list valist;
	double sum = 0.0;
	int i;
	
	/* initialize valist for num number of arguments */
	
	va_start(valist, num);
	
	/* access all the argument assigned to valist */
	for (i = 0; i < num; i++){
		sum += va_arg(valist, int);
	}
	
	/* clean memory reserved for 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));
}
int
SetMemm (int num, ...  )
{
    va_list valist;
	int sum = 0;
	int i;

	/* initialize valist for num number of arguments */
	 VA_START(valist, num);


	/* access all the arguments assigned to valist */
	for (i = 0; i < num; i++) {
		sum += VA_ARG(valist, int);
	}

	/* clean memory reserved for valist */
    VA_END(valist);

	return sum;
	
 // return InternalMemSetMem (Buffer, Length, Value);
}


猜你喜欢

转载自blog.csdn.net/robinsongsog/article/details/80427514