zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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语言对可变参数的使用还是有点麻烦,不如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