鱼C论坛

 找回密码
 立即注册
查看: 4447|回复: 12

stdarg.h 可变参数谁能给我个详解,我英文不好,请勿转载网上的,我网上搜了一天不懂

[复制链接]
发表于 2013-8-23 21:03:20 | 显示全部楼层 |阅读模式
10鱼币
请大侠教下我可变参数,我英文的语言基础不好,要详尽又易懂的,网上我搜了一天了,还是不太明白。

最佳答案

查看完整内容

这是我以前说的学习笔记,希望你能看懂#include #include int max(int cnt, ...) { va_list v; // 声明va_list型变量v,用以保存可变参数列表 va_start(v,cnt); // 指明可变参数列表的开始:在参数cnt后面的 int i; int maxvalue = va_arg(v, int); // 从参数表中取出一个int类型参数 for (i=1; imaxvalue) maxvalue = data; } ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-23 21:03:21 | 显示全部楼层
本帖最后由 苹果沃珂 于 2013-8-29 15:35 编辑

这是我以前说的学习笔记,希望你能看懂#include <stdio.h>
#include <stdarg.h>
int max(int cnt, ...)
{
        va_list v;       // 声明va_list型变量v,用以保存可变参数列表
        va_start(v,cnt); // 指明可变参数列表的开始:在参数cnt后面的
        int i;
        int maxvalue = va_arg(v, int); // 从参数表中取出一个int类型参数
        for (i=1; i<cnt; i++)
        {
                int data = va_arg(v, int); // 从参数表中取出一个int类型参数
                if (data>maxvalue)
                        maxvalue = data;
        }
        va_end(v);       // 释放可变参数列表v
        return maxvalue;
}
int main()
{
        printf("max=%d \n",max(5,1,2,3,5,4));
        printf("max=%d \n",max(3,11,22,18));
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-23 22:02:02 | 显示全部楼层
网上有很多中文资料,你这样问大家没法回答的。你先自己写一个程序实验一下,然后把程序中的错误和不懂的地方发出来大家就能给你解释了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-23 22:05:27 | 显示全部楼层
问题描述太笼统了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-23 22:13:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-23 22:20:09 | 显示全部楼层
拈花小仙 发表于 2013-8-23 22:13
这个头文件里就几个宏啊,想知道用法

sorry,我是来赚鱼币的。其实我比你还不懂{:7_182:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-24 01:33:44 | 显示全部楼层
JohnnyB0Y 发表于 2013-8-23 22:20
sorry,我是来赚鱼币的。其实我比你还不懂

楼主给你气吐血了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-24 22:07:39 | 显示全部楼层
看看啥情况啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-29 10:40:41 | 显示全部楼层
具体想知道哪个,你贴出来,大家可以帮你解决解决!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-25 10:43:15 | 显示全部楼层
新手,学习中,呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-26 22:16:51 | 显示全部楼层
c++手册下载http://bbs.fishc.com/thread-38279-1-1.html以下内容来自c++中文手册
va_arg
语法:

   #include <stdarg.h>  type va_arg( va_list argptr, type );  void va_end( va_list argptr );  void va_start( va_list argptr, last_parm );
功能: 宏va_arg()用于给函数传递可变长度的参数列表。
首先,必须调用va_start() 传递有效的参数列表va_list和函数强制的第一个参数。第一个参数代表将要传递的参数的个数。
其次,调用va_arg()传递参数列表va_list 和将被返回的参数的类型。va_arg()的返回值是当前的参数。
再次,对所有的参数重复调用va_arg()
最后,调用va_end()传递va_list对完成后的清除是必须的。
For example:
#include<cstdarg>
#include<stdio.h>

int sum( int, ... );

int main( void )
{
    int answer = sum( 4, 4, 3, 2, 1 );
    printf( "The answer is %d\n", answer );

    return 0;
}

int sum( int num, ... )
{
    int answer = 0;
    va_list argptr;
    va_start( argptr, num );
    for( ; num > 0; num-- )
    {
        answer += va_arg( argptr, int );
    }

    va_end( argptr );
    return  answer ;
}
这段代码显示10,他们是4+3+2+1。

评分

参与人数 1鱼币 +5 收起 理由
拈花小仙 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-28 15:24:45 | 显示全部楼层
:lol:,回了这么多贴,就lz给加分了,可惜现在等级不够,还加不了好友
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-28 16:31:49 | 显示全部楼层
fishso 发表于 2013-9-26 22:16
c++手册下载http://bbs.fishc.com/thread-38279-1-1.html以下内容来自c++中文手册
va_arg
语法:

:victory:分析很到位,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 00:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表