论坛首页· 友情链接申请·申请版主· 广告投放· 道具中心· 设为首页· 收藏本站
发新话题
打印

[求助] 设计一个参数数目可变的函数,输出n个实参之和

设计一个参数数目可变的函数,输出n个实参之和

设计一个参数数目可变的函数,输出n个实参之和,求源代码和原理,谢谢
幸福不是男人的权利,拼搏才是男人的义务!

TOP

设计可变参数数目的函数的主要难度在于要自己手动从栈中提取参数,但这些有现成的宏定义可以用,在<stdarg.h>和<stdargs.h>中。
下面是一个例子,sum()的功能是任意数量的整数求和。
sum()第一个参数是要求和的数的个数,后面跟着若干整型参数。如果实参个数小于第一个参数num的数值,sum()行为不确定。
也可以不用num而设置一个参数结束标志(比如最后一个参数为-1等),但也有同样的问题。说白了就是你必须给函数一个知道参数个数的方法,否则函数无法知道你到底在调用的时候给了几个实参。
#include <stdio.h>
#include <stdarg.h>

int sum(int num, ...)
{
va_list parg;
int arg;
int s;
int i;

va_start(parg, num);
for (s = 0, i = 0; i < num; i++)
{
arg = va_arg(parg, int);
s += arg;
}
va_end(parg);

return s;
}

int main(int argc, char* argv[])
{
printf("%d\n", sum(1, 1)); // 1
printf("%d\n", sum(2, 1, 2)); // 1 + 2
printf("%d\n", sum(3, 1, 2, 3)); // 1 + 2 + 3
printf("%d\n", sum(4, 1, 2, 3, 4)); // 1 + 2 + 3 + 4

return 0;
}
因为梦想而努力,因为有你而精彩!
mail: qianzongming@gmail.com

TOP

发新话题