拈花小仙 发表于 2013-8-23 21:03:20

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

请大侠教下我可变参数,我英文的语言基础不好,要详尽又易懂的,网上我搜了一天了,还是不太明白。

苹果沃珂 发表于 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;
}

liufei_vip 发表于 2013-8-23 22:02:02

网上有很多中文资料,你这样问大家没法回答的。你先自己写一个程序实验一下,然后把程序中的错误和不懂的地方发出来大家就能给你解释了。。。

JohnnyB0Y 发表于 2013-8-23 22:05:27

问题描述太笼统了

拈花小仙 发表于 2013-8-23 22:13:01

JohnnyB0Y 发表于 2013-8-23 22:05 static/image/common/back.gif
问题描述太笼统了

这个头文件里就几个宏啊,想知道用法

JohnnyB0Y 发表于 2013-8-23 22:20:09

拈花小仙 发表于 2013-8-23 22:13 static/image/common/back.gif
这个头文件里就几个宏啊,想知道用法

sorry,我是来赚鱼币的。其实我比你还不懂{:7_182:}

zZ_小春 发表于 2013-8-24 01:33:44

JohnnyB0Y 发表于 2013-8-23 22:20 static/image/common/back.gif
sorry,我是来赚鱼币的。其实我比你还不懂

{:5_103:}楼主给你气吐血了

leewon 发表于 2013-8-24 22:07:39

看看啥情况啊

编程难 发表于 2013-8-29 10:40:41

具体想知道哪个,你贴出来,大家可以帮你解决解决!{:5_110:}

玉宁417 发表于 2013-9-25 10:43:15

新手,学习中,呵呵

fishso 发表于 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 );
    returnanswer ;
}
这段代码显示10,他们是4+3+2+1。


fishso 发表于 2013-9-28 15:24:45

:lol:,回了这么多贴,就lz给加分了,可惜现在等级不够,还加不了好友

shayuwenlu 发表于 2013-9-28 16:31:49

fishso 发表于 2013-9-26 22:16 static/image/common/back.gif
c++手册下载http://bbs.fishc.com/thread-38279-1-1.html以下内容来自c++中文手册
va_arg
语法:


:victory:分析很到位,谢谢。
页: [1]
查看完整版本: stdarg.h 可变参数谁能给我个详解,我英文不好,请勿转载网上的,我网上搜了一天不懂