C语言不定参数的函数
2015-11-28 13:54
267 查看
(1)va_list
定义了一个指针arg_ptr, 用于指示可选的参数.
(2)va_start(arg_ptr, argN)
使参数列表指针arg_ptr指向函数参数列表中的第一个可选参数,argN是位于第一个可选参数之前的固定参数,
或者说最后一个固定参数.如有一va函数的声明是void va_test(char a, char b, char c, ...), 则它的固定参数依次是a,b,c, 最后一个固定参数argN为c, 因此就是va_start(arg_ptr, c).
(3)va_arg(arg_ptr, type)
返回参数列表中指针arg_ptr所指的参数, 返回类型为type. 并使指针arg_ptr指向参数列表中下一个参数.返回的是可选参数, 不包括固定参数.
(4)va_end(arg_ptr)
清空参数列表, 并置参数指针arg_ptr无效.
举例:
定义了一个指针arg_ptr, 用于指示可选的参数.
(2)va_start(arg_ptr, argN)
使参数列表指针arg_ptr指向函数参数列表中的第一个可选参数,argN是位于第一个可选参数之前的固定参数,
或者说最后一个固定参数.如有一va函数的声明是void va_test(char a, char b, char c, ...), 则它的固定参数依次是a,b,c, 最后一个固定参数argN为c, 因此就是va_start(arg_ptr, c).
(3)va_arg(arg_ptr, type)
返回参数列表中指针arg_ptr所指的参数, 返回类型为type. 并使指针arg_ptr指向参数列表中下一个参数.返回的是可选参数, 不包括固定参数.
(4)va_end(arg_ptr)
清空参数列表, 并置参数指针arg_ptr无效.
举例:
#include <stdio.h> #include <stdarg.h> #include <string.h>
/*功能打印第一个不定参数,和所有参数之和(包括固定参数)*/ int sumi(int c, ...) { va_list argptr;//定义指针argptr va_start(argptr, c); //初始化变元指针,c等于不定参数的前一个固定参数 int sum = c; c = va_arg(argptr, int); //作为下一个参数类型的参数类型,返回不定参数 //c保存第一个不定参数 printf("%d\n", c);//打印第一个不定参数 while(0 != c) //末尾特定字符指示结束 { sum = sum + c; c = va_arg(argptr, int); } va_end(argptr); return sum; } /*功能:num是不定参数的个数,求出不定参数的总和*/ double sum_series(int num, ...) { double sum = 0.0, t; va_list argptr; va_start(argptr, num);//初始化变元指针 while (num--) { t = va_arg(argptr, double);//double是返回类型 sum = sum + t; } va_end(argptr); return sum; } int main() { int i = sumi(1,2,3,4,5,6,7,8,9,0);//这里2,...,0是可选的参数,2是第一个不定参数 printf("%d\n", i); double d = sum_series(4, 1/3.0, 1/4.0, 1/5.0, 1/6.0);//注:不定参数要用浮点数 printf("%f\n", d); return 0; }
相关文章推荐
- c++ 深拷贝string类 简单实现
- 可变参数列表实现printf函数
- C/C++——程序实现过程之编译、链接和执行
- 数组传参,main传参(c++)
- 35.c/c++程序员面试宝典-容器
- C语言去掉字符串中的数字
- 在C++里类多一点好还是少一点好?
- 在C++里类多一点好还是少一点好?
- C++中char*与wchar_t*之间的转换
- C++中char*与wchar_t*之间的转换
- C语言学习之结构体与指针部分----结合doubango sip协议栈源代码学习---------阿冬专栏!!
- 载入PLY模型 C++
- C语言判断输入的字符串是否为回文结构
- 求输入两个数的最大公约数——C语言(求完善)
- C语言实现字符串函数
- c++11,std::find的并行化模板化
- C语言求三个数的中间值(三目运算符)
- JNA—模拟C语言结构体
- C语言将整形转化为对应的字符型
- C++学习笔记_对话框使用技巧