C语言不支持函数重载,但支持可变参数。在 stdarg.h 中提供了3个方法和1个结构。数组
struct va_list,参数列表函数
void va_start(va_list,int); 访问参数前的准备工做spa
void va_arg(va_list,void);访问参数,注意参数中的void指数据类型,实际调用时应该是int,float,char等指针
void va_end(va_end);访问结束后清理工做code
使用过程blog
#include <stdio.h> #include <stdarg.h> int main(){ int sum(int c,...); int c = sum(6,1,2,3,4,5,5); printf("sum = %d\n",c); return 0; } int sum(int c,...){ va_list var_list; int count = 0; va_start(var_list,c); for(;c>0;c--){ count+=va_arg(var_list,int); } va_end(var_list); return count; }
注意:内存
声明可变参数方法时,第一个参数应为int,用来代表参数数量,是不能省略的io
我的感受:class
1.可变参数能够理解为传递给方法一个指针,参数数组的指针,由于数组指针做为参数,接受参数的方法是不知道数组大小的,因此还要传递一个参数数量,这也说明了为何可变参数的第一个int参数不可省略。数据类型
2.va_start();应该是初始化了一下参数指针,由于没有这个过程参数访问就会失败。
3.va_arg();这个很明显了,就是指针解引用,并向后移动。
4.va_end();这个也很好理解,确定是释放内存了,而且销毁指针。