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输出的结果即是该函数返回的结果。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

时间: 2024-11-05 22:03:14

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

[深入学习C#]输入输出安全性——可变类型形參列表的变化安全性

可变类型形參列表(variant-type-parameter-lists) 可变类型形參列表(variant-type-parameter-lists )仅仅能在接口和托付类型上出现.它与普通的type-parameter-lists的差异在于,它的每一个类型形參前面能够加上变化性批注:in和out. 假设前面的变化性批注为out,则该类型形參成为协变类型形參:假设变化批注为in.则该类型形參成为逆变类型形參:假设不存在变化批注,则称该类型形參为固定类型形參. 比如: interface C<

C语言可变参数函数实现原理

一.可变参数函数实现原理 C函数调用的栈结构: 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈. 本文地址:http://www.cnblogs.com/archimedes/p/variable-parameter.html,转载请注明源地址. 例如,对于函数: void fun(int a, int b, int c) { int d; ... } 其栈结构为 0x1ffc-->d 0x200

C语言——可变参数

http://blog.chinaunix.net/space.php?uid=25304914&do=blog&id=3066441 一.是什么 我们学习C语言时最经常使用printf()函数,但我们很少了解其原型.其实printf()的参数就是可变参数,想想看,我们可以利用它打印出各种类型的数据.下面我们来看看它的原型: int printf( const char* format, ...); 它的第一个参数是format,属于固定参数,后面跟的参数的个数和类型都是可变的(用三个点&

C语言可变参数

转自http://www.cnblogs.com/wangyonghui/archive/2010/07/12/1776068.html,稍有改动 一.是什么 我们学习C语言时最经常使用printf()函数,但我们很少了解其原型.其实printf()的参数就是可变参数,想想看,我们可以利用它打印出各种类型的数据.下面我们来看看它的原型: int printf( const char* format, ...); 它的第一个参数是format,属于固定参数,后面跟的参数的个数和类型都是可变的(用三

c语言 可变参数传递 va_list使用

通过使用VA_LIST可以实现向函数传递不同数目的参数. #include <stdarg.h> #include <iostream> #include <string> using namespace std; #pragma argsused //函数A 传递若干个整形变量 void Funca(int n,...) {  //定义获取变量的结构体  va_list va_ptr;  //开始从头部开始获取变量  va_start(va_ptr,n);  for(

C语言可变长参数实现原理

博客:存储系统研究 微博:http://weibo.com/u/2203007022             (1)      C语言可变参数 我们可以从C语言的printf得出可变参数的作用,printf函数的原型如下: int printf ( const char * format, ... ); 通过使用可变个数参数,就是传入的参数个数是可变的,如printf需要根据format实参传入多个实参. (2)      C语言可变参数的使用 下面一个函数myprintf是自己实现的比较简单的

c语言的结构体字节数统计

struct结构体的字节数 等于 结构体中最大类型的字节数的倍数. 如:?typedef struct Student{??? short id; //2个字节??? char name[15]; //1*15个字节??? int age; //4个字节??? char num; //1个字节} Student; 总共28个字节. c语言的结构体字节数统计

1-5-08:满足条件的数累加

描述 将正整数 m 和 n 之间(包括 m 和 n)能被 17 整除的数累加.其中,0 < m < n < 1000. 输入一行,包含两个整数m和n,其间,以一个空格间隔.输出输出一行,包行一个整数,表示累加的结果.样例输入 50 85 样例输出 204 来源元培-From Whf #include<stdio.h> int main() { int n,m,i; int num=0; scanf("%d %d",&n,&m); for(i

转:C语言 可变参数

C语言 可变参数 堆栈一般是怎么压栈处理的 /* * stack space: * *        参数3   |    up *        参数2   | *        参数1   v    down */ 因为参数是按照从右向左依次压入的,所以后面参数的地址依次根据“%”处理即可.文章中start = (int*) &buffer即获取了最后入栈的参数地址(如果最后一个入栈参数为int类型,自己可以推算出倒数第二个参数的地址.) [ 声明:版权所有,欢迎转载,请勿用于商业用途.