在我们平常调用函数的时候,会进行传参,调用的函数也会有参数去接收,数量和类型都是对应的。而不定参数函数是指对一个函数传参,参数的个数可以不确定。接下来,我就简单的叙述一下不定参数函数的原理及应用。
在我们刚学C语言的时候,大多会首先接触printf();函数。通过这个函数,我们可以打印变量到屏幕,如:
printf("%d", a);
printf("%d,%d",b,c);
printf();也是一个函数,我们平常也只会应用他,他的功能是想打印多少东西就可以打印多少。但是printf();函数也是有参数的,他的函数内容包含在头文件里面,所以我们只需要使用就可以了。
但是我们现在要考虑的是,在我们设计不定参数函数的时候:
1.如何告诉函数我们传入了几个参数
2.每个参数的类型是什么
3.函数怎样去访问这些参数
4.函数调用完成后如何将参数从堆栈中释放出来
函数定义看似简单,实际上却需要我们解决许多问题。
要解决上面的问题,我们需要了解下面几个宏定义:
va_list 这个是typedef重新定义的一个类型,本质是char *
va_start() 是用来初始化指针的
va_arg() 值指向后面未知参数部分,能拿出我们想要拿出来的值,并且每一次使用,指针都会指向下一个参数
va_end() 是用来释放这个指针的。
调用这几个参数,需要定义 <stdarg.h> 这个头文件。
下面我们来用printf();函数举例说明可变参数函数的调用过程: