C语言可变参实现参数累加返回

C语言可变参的作用真的是非常大,自从发表了可变参如何实现printf,fprintf,sprintf的文章以来,便有不少博友私信问我实现的机制,我也解释了相关的知识点。今天,我们借着这个机会,再来举一个例子,看看如何用可变参来实现数据累加返回,请看代码:

#include <stdio.h>
#include <stdarg.h>

int add(int count,...)
{
  va_list ap;
  int i, sum;

  va_start (ap, count);		/* Initialize the argument list. */

  sum = 0;
  //将传参进来的所有整数进行累加
  for (i = 0; i < count; i++)
    sum += va_arg (ap, int);	/* Get the next argument value. */

  va_end (ap);			/* Clean up. */
  //将累加的数值返回
  return sum;
}

int main(void)
{
  	printf ("%d\n", add(3, 5, 5, 6));
  	printf ("%d\n", add(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
	return 0 ;
}

运行结果:

我们看到,传进来的参数经过相加后返回,printf输出的结果即是该函数返回的结果。

时间: 2024-12-28 14:30:23

C语言可变参实现参数累加返回的相关文章

Java方法的参数和返回类型统一为Map是否合理?

问题描述 开发一个Web应用. 主管要求 所有业务逻辑的Java方法参数和返回类型必须统一为Map类型.理由是将来扩展时接口不用修改.而且有多返回值的方法也好处理但是这样一来.返回一个String都要写成 Map resultMap = doXXXXX(paramMap);String result = (String)resultMap.get("resultStr");返回一个VOMap resultMap = doXXXXX(paramMap);XXXXVO resultVO =

C语言中结构体参数变量的传递

[文章摘要]        在C语言中,结构体参数变量经常作为函数的参数来进行传递.但如果参数设置不当,会出现内存问题.        本文以实际的程序代码为例,详细地介绍如何正确地使用结构体参数变量,为相关的开发工作提供了参考. [关键词]        C语言  结构体  函数  参数  传递   一.前言        本文中的程序实现对员工信息结构体字段赋值并打印出来的功能.该结构体的定义如下: // 员工信息结构体 typedef struct {        INT8      

在C#中如何在函数参数中返回结构数组?

函数|数组 头晕脑涨地研究了一天,就为了实现在函数的参数中返回结构数组. 现供大家分享,节省学习时间. 实例:  /// <summary>  /// 用户信息结构  /// </summary>  public struct TUSER  {   public string LoginName;   public string LoginPass;   public string TrueName;   public string EMail;   public int Leve

springmvc-springMVC参数错误返回值

问题描述 springMVC参数错误返回值 我在用SpringMVC时,如果某些参数在请求时为必填参数,会用到(required = true),即:@RequestParam(value = ""id"" required = true) String idString name)但是这样的话如果id为空一请求就会报个Spring参数的错.后来我把required 改为false,然后在程序中判断传入参数是否为空,如果为空的话,手动拼接要返回的json字符串:{s

对象- window.showModalDialog传递参数后返回值

问题描述 window.showModalDialog传递参数后返回值 window.showModalDialog传递参数var obj = new Object()后 返回值是什么 解决方案 什么类型的数据都可以

c语言-C语言,用命令行参数复制文件,请问哪里出错了

问题描述 C语言,用命令行参数复制文件,请问哪里出错了 #include #include int main(int argc, char *argv[]) { int ch; errno_t err; FILE *source, *destination; if ((err = fopen_s(&source, argv[1], "rb") )!=0) { printf("can't open %sn", argv[1]); exit(1); } if (

mian()的参数和返回值到底是什么?

一直以来都使用着void main(){}但是从没有关注过参数和返回值~~~ 确实是缺少哪种疑问的学习态度,从来都是来学这是什么,却没有考虑为什么要这样写. 其实main()是有参数的,而且是两个,它的原型如下: int main(int argc,char* argv[]) { return 0; } //其中,argc代表命令行中字符串的个数,argv是一个字符指针数组==>指向命令行中各个字符串   由于main()函数是被启动例程调用的,所以从main()函数return时仍返回到启动例

c语言-C语言使用命令行参数问题

问题描述 C语言使用命令行参数问题 在C语言中,为了使用命令行参数,main函数的第一行一般形式为void main(int argc,char*argv[]),如果命令行为"test a 3 data",则argv[0]表示的是:A)test B)a C)3 D)data===答案是A,求大侠解释? 解决方案 依次 agrv[0]代表程序名,argv[1]....之后代表参数 解决方案二: 当然了,参数用空格分隔.第一个是test.第二个是a,等等.选a 解决方案三: 学习C语言时一

测试-C语言getchar()为什么无法读取ungetch()返回的缓存字符

问题描述 C语言getchar()为什么无法读取ungetch()返回的缓存字符 在看K&R的逆波兰算法,发现里面用getch,把它改成getchar后发现无法读取ungetch返回缓冲区的字符而是直接读取下一个字符了.测试了一下 main() { int a,b,c; a=getchar(); ungetch(a); putchar(getchar()); while(1); } 输入23后发现返回的是3. ungetch返回的不是缓存吗,怎么读取不了呢? 解决方案 看了这段代码,深深地感觉自