C语言——stdarg.h
C语言不支持函数重载,但支持可变参数。在 stdarg.h 中提供了3个方法和1个结构。
struct va_list,参数列表
void va_start(va_list,int); 访问参数前的准备工作
void va_arg(va_list,void);访问参数,注意参数中的void指数据类型,实际调用时应该是int,float,char等
void va_end(va_end);访问结束后清理工作
使用过程
#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,用来表明参数数量,是不能省略的
个人感觉:
1.可变参数可以理解为传递给方法一个指针,参数数组的指针,因为数组指针作为参数,接受参数的方法是不知道数组大小的,所以还要传递一个参数数量,这也说明了为什么可变参数的第一个int参数不可省略。
2.va_start();应该是初始化了一下参数指针,因为没有这个过程参数访问就会失败。
3.va_arg();这个很明显了,就是指针解引用,并向后移动。
4.va_end();这个也很好理解,肯定是释放内存了,并且销毁指针。