C语言中实现可变参数函数
C语言 实现 函数 参数 可变
2023-09-11 14:16:04 时间
通过stdarg.h头文件为函数提供了定义可变参数列表的能力。声明一个可变参数的函数类似:
void f1(int n,...);
其中n表示参数列表个数,而用省略号来表示未知参数列表。stdarg.h中提供了一个va_list类型,用于存放参数。一个大概的使用过程类似:
void f1(int n,...)
{
va_list ap;
va_start(ap,n); //初始化参数列表
double first=va_arg(ap,double); //取第一个参数
int second=va_arg(ap,int); //取第二个参数
...
va_end(ap); //清理工作
}
看一个求和的例子:
#include stdio.h
#include stdarg.h
double sum(int ,
);
int main(void)
{
double s,t;
s=sum(3,1.1,2.2,13.3);
t=sum(6,1.1,2.1,13.1,4.1,5.1,6.1);
printf("return value for " \
"sum(3,1.1,2.2,13.3): %g\n",s);
printf("return value for " \
"sum(6,1.1,2.1,13.1,4.1,5.1,6.1): %g\n",t);
return 0;
}
double sum(int lim,
)
{
va_list ap;
double total=0;
va_start(ap,lim);
int i;
for(i=0;i lim;i++)
total+=va_arg(ap,double);
va_end(ap);
return total;
}
C语言“…”占位符及可变参数函数 C语言函数的参数传递总是固定了个数,那么有没有传递任意个数参数的方法呢?在C++中,函数重载提供了多种参数传递的解决办法,但也不是任意参数个数。事实上,C语言是提供任意数量参数的解决方案的。
p span "img" alt="" src="https://ucc.alicdn.com/pic/developer-ecology/ziw5eive2t2t2_231b323b37924e4597b6a34afdabfcb3.png?x-oss-process=image/resize,h_118"/>
面向对象的程序设计C++课堂复盘总结 C语言复习+C++基础语法 Stay Hungry,Stay Foolish. 任何人都能写出机器能看懂的代码,但只有优秀的程序员才能写出人能看懂的代码。 有两种写程序的方式:一种是把代码写得非常复杂,以至于 “看不出明显的错误”;另一种是把代码写得非常简单,以至于 “明显看不出错误”。 “把正确的代码改快速”,要比 “把快速的代码改正确”,容易得太多。 C++ 庞大、复杂是无法改变的事实,所以我们要把这三条格言铭记在心,对它保持一颗 “敬畏” 的心,在学习语言特性的同时,千万不要滥用特性,谦虚谨慎,戒骄戒躁。 -------CSDN Albert Edison
C语言总结(第2章算法——程序的灵魂 第3章最简单的C程序设计——顺序程序设计 第4章选择结构程序设计) 算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 6是解决做什么和怎么做的问题。简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵魂。
C语言程序设计第五版 谭浩强 P107 3,4,6,8,9题解 1)3+4 5 优先3+4得到结果7,因此7 5结果为真; 4==5为假,一真一假逻辑与最终结果为假。结果为0 (2)优先算术运算4+5得到7,非0则为真,4-5得到-1,非0则为真,||和 优先级最低,自左向右运算,3||7结果为1,1 -1结果为1,一真一假逻辑与最终结果为假。结果为1
【C语言进阶】C语言程序设计:动态通讯录(顺序表实现) 动态通讯录的实现 一、实验的目的和意义 二、实验内容描述 三、功能描述 四、数据结构 1、三大模块 2、结构设计 3、动态开辟 4、文件操作 5、主要函数 五、流程图及模块算法 1.Contacct 程序运行流程图 2、AddContct(增加)函数流程图 3、DelContct(删除)函数流程图 4、SearchContct(查找)函数流程图 5、ModifyContct(修改)函数流程图 6、SortContct(排序)函数流程图 六、实验测试结果 七、实验总结 八、源代码 1、DynamicContact.h 2、DynamicC
void f1(int n,...);
其中n表示参数列表个数,而用省略号来表示未知参数列表。stdarg.h中提供了一个va_list类型,用于存放参数。一个大概的使用过程类似:
void f1(int n,...)
{
va_list ap;
va_start(ap,n); //初始化参数列表
double first=va_arg(ap,double); //取第一个参数
int second=va_arg(ap,int); //取第二个参数
...
va_end(ap); //清理工作
}
看一个求和的例子:
#include stdio.h
#include stdarg.h
double sum(int ,
![](http://www.blogjava.net/Images/dot.gif)
int main(void)
{
double s,t;
s=sum(3,1.1,2.2,13.3);
t=sum(6,1.1,2.1,13.1,4.1,5.1,6.1);
printf("return value for " \
"sum(3,1.1,2.2,13.3): %g\n",s);
printf("return value for " \
"sum(6,1.1,2.1,13.1,4.1,5.1,6.1): %g\n",t);
return 0;
}
double sum(int lim,
![](http://www.blogjava.net/Images/dot.gif)
{
va_list ap;
double total=0;
va_start(ap,lim);
int i;
for(i=0;i lim;i++)
total+=va_arg(ap,double);
va_end(ap);
return total;
}
C语言对可变参数的使用还是有点麻烦,不如ruby和java简便。比如ruby中定义并使用可变参数参数:
def sum(*e)
e.inject{|sum,i| sum+=i}
end
sum(1,2,3,4,5)= 15
文章转自庄周梦蝶 ,原文发布时间 2007-08-31
C语言“…”占位符及可变参数函数 C语言函数的参数传递总是固定了个数,那么有没有传递任意个数参数的方法呢?在C++中,函数重载提供了多种参数传递的解决办法,但也不是任意参数个数。事实上,C语言是提供任意数量参数的解决方案的。
p span "img" alt="" src="https://ucc.alicdn.com/pic/developer-ecology/ziw5eive2t2t2_231b323b37924e4597b6a34afdabfcb3.png?x-oss-process=image/resize,h_118"/>
面向对象的程序设计C++课堂复盘总结 C语言复习+C++基础语法 Stay Hungry,Stay Foolish. 任何人都能写出机器能看懂的代码,但只有优秀的程序员才能写出人能看懂的代码。 有两种写程序的方式:一种是把代码写得非常复杂,以至于 “看不出明显的错误”;另一种是把代码写得非常简单,以至于 “明显看不出错误”。 “把正确的代码改快速”,要比 “把快速的代码改正确”,容易得太多。 C++ 庞大、复杂是无法改变的事实,所以我们要把这三条格言铭记在心,对它保持一颗 “敬畏” 的心,在学习语言特性的同时,千万不要滥用特性,谦虚谨慎,戒骄戒躁。 -------CSDN Albert Edison
C语言总结(第2章算法——程序的灵魂 第3章最简单的C程序设计——顺序程序设计 第4章选择结构程序设计) 算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 6是解决做什么和怎么做的问题。简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵魂。
C语言程序设计第五版 谭浩强 P107 3,4,6,8,9题解 1)3+4 5 优先3+4得到结果7,因此7 5结果为真; 4==5为假,一真一假逻辑与最终结果为假。结果为0 (2)优先算术运算4+5得到7,非0则为真,4-5得到-1,非0则为真,||和 优先级最低,自左向右运算,3||7结果为1,1 -1结果为1,一真一假逻辑与最终结果为假。结果为1
【C语言进阶】C语言程序设计:动态通讯录(顺序表实现) 动态通讯录的实现 一、实验的目的和意义 二、实验内容描述 三、功能描述 四、数据结构 1、三大模块 2、结构设计 3、动态开辟 4、文件操作 5、主要函数 五、流程图及模块算法 1.Contacct 程序运行流程图 2、AddContct(增加)函数流程图 3、DelContct(删除)函数流程图 4、SearchContct(查找)函数流程图 5、ModifyContct(修改)函数流程图 6、SortContct(排序)函数流程图 六、实验测试结果 七、实验总结 八、源代码 1、DynamicContact.h 2、DynamicC
相关文章
- 计算机等级考试二级C语言上机题集(第31~35套)
- C语言程序设计100例之(61):数字对
- C语言程序设计100例之(4):水仙花数
- C语言及程序设计[套餐]课程主页
- 字符串操作——C语言实现
- C语言易错题集 第三部
- 欲与君相知,应先与君识——初始C语言
- 《C语言编程初学者指南》一导读
- 《C语言接口与实现:创建可重用软件的技术》一1.4 扩展阅读
- 【C语言】简单实现三子棋游戏
- 基于C语言来实现图形界面画板的功能【100010736】
- 基于C语言实现支持 TCP 可靠数据传输实验【100010469】
- 数据结构-图的实现以及基础算法-C语言实现
- C语言:分支与循环(1)
- C语言实现三子棋游戏
- C语言十六进制字符串转换十进制
- 图书馆管理系统C语言代码
- 【C语言进阶】字符串函数与内存函数的学习与模拟实现
- 基数排序(桶排序)——C语言实现
- 希尔排序——C语言实现
- 数据结构基础(3)---C语言实现单链表
- 51系列小型操作系统精髓 简单实现6 C语言版待改进
- C语言中整形数组、字符数组、字符串的区别
- VS2019编译器C语言调试
- C语言字符串操作函数strcpy、strcat、strcmp的使用介绍和函数实现