如何访问变参数函数最后一个参数

 我来答
城南明月羿当年
2015-04-07 · 知道合伙人生活技巧行家
城南明月羿当年
知道合伙人生活技巧行家
采纳数:24666 获赞数:123229
计算机爱好者

向TA提问 私信TA
展开全部
通常我们使用的C函数的参数个数都是固定的,但也有不固定的。比如printf()与scanf()。如何自己动手实现一个可变参数函数,这个还是有点技巧的。

我们最常用的就是定义一个宏,使用printf或者printk,如下

#define wwlogk(fmt, args...) printk(fmt, ## args)

现在我们自己动手实现一个可变参数的函数,后面分析原理。首先看一个例子:

#include <stdio.h>
#include <stdarg.h>
int Sum(int first, int second, ...)//当无法列出传递函数的所有实
//参的类型和数目时,可用省略号指定参数表
{
int sum = 0, t = first;
va_list vl;
va_start(vl, first);
while (t != -1){
sum += t;
t = va_arg(vl, int); //将当前参数转换为int类型
}
va_end(vl);
return sum;
}

int main(int argc, char* argv[])
{
printf("The sum is %d\n", Sum(30, 20, 10, -1)); //-1是参数结束标志
return 0;
}
在上面的例子中,实现了一个参数个数不定的求int型和的函数Sum()。
其中有几个变量需要说明一下。va_list、va_start()、va_end和va_arg。

Va_list:该类型变量用来访问可变参数,实际上就是指针。

Va_start():是一个宏,用来获取参数列表中的参数,使vl指向第一个可变参数,使用完毕后调用va_end()结束。

va_end:也是一个宏,用来结束va_start()的调用。

va_arg:宏,用来获参数列表中的取下一个值。
当明天依旧
推荐于2016-03-15 · TA获得超过208个赞
知道小有建树答主
回答量:468
采纳率:0%
帮助的人:407万
展开全部
通常我们使用的C函数的参数个数都是固定的,但也有不固定的。比如printf()与scanf()。如何自己动手实现一个可变参数函数,这个还是有点技巧的。

我们最常用的就是定义一个宏,使用printf或者printk,如下

#define wwlogk(fmt, args...) printk(fmt, ## args)

现在我们自己动手实现一个可变参数的函数,后面分析原理。首先看一个例子:

#include <stdio.h>
#include <stdarg.h>
int Sum(int first, int second, ...)//当无法列出传递函数的所有实
//参的类型和数目时,可用省略号指定参数表
{
int sum = 0, t = first;
va_list vl;
va_start(vl, first);
while (t != -1){
sum += t;
t = va_arg(vl, int); //将当前参数转换为int类型
}
va_end(vl);
return sum;
}

int main(int argc, char* argv[])
{
printf("The sum is %d\n", Sum(30, 20, 10, -1)); //-1是参数结束标志
return 0;
}
在上面的例子中,实现了一个参数个数不定的求int型和的函数Sum()。
其中有几个变量需要说明一下。va_list、va_start()、va_end和va_arg。

Va_list:该类型变量用来访问可变参数,实际上就是指针。

Va_start():是一个宏,用来获取参数列表中的参数,使vl指向第一个可变参数,使用完毕后调用va_end()结束。

va_end:也是一个宏,用来结束va_start()的调用。

va_arg:宏,用来获参数列表中的取下一个值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式