码迷,mamicode.com
首页 > 其他好文 > 详细

[C] 可变参数变量

时间:2020-02-06 12:28:26      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:return   const   string   end   http   i++   count   tor   char*   

exmaple


#include <stdio.h>
#include <stdarg.h>
double sum(int lim,...)
{
    va_list ap;
    double tot=0;
    va_start(ap, lim);
    for (int i=0; i<lim; i++) {
        tot+=va_arg(ap, double);
    }
    va_end(ap);
    return tot;
}

int main()
{
    double s = sum(3,1.1,2.5,13.3);
    printf("return value for sum(3,1.1,2.5,13.3):%g\n",s);
    
    return 0;
}

Result:
技术图片

va_copy c++11

/* va_copy example */
#include <stdio.h>      /* printf, vprintf*/
#include <stdlib.h>     /* malloc */
#include <string.h>     /* strlen, strcat */
#include <stdarg.h>     /* va_list, va_start, va_copy, va_arg, va_end */

/* print ints until a zero is found: */
void PrintInts (int first,...)
{
  char * buffer;
  const char * format = "[%d] ";
  int count = 0;
  int val = first;
  va_list vl,vl_count;
  va_start(vl,first);
  
  /* count number of arguments: */
  va_copy(vl_count,vl);
  while (val != 0) {
    val=va_arg(vl_count,int);
    ++count;
  }
  va_end(vl_count);
  
  /* allocate storage for format string: */
  buffer = (char*) malloc (strlen(format)*count+1);
  buffer[0]='\0';
  
  /* generate format string: */
  for (;count>0;--count) {
    strcat (buffer,format);
  }
  
  /* print integers: */
  printf (format,first);
  vprintf (buffer,vl);
  
  va_end(vl);
}

int main ()
{
  PrintInts (10,20,30,40,50,0);
  return 0;
}

Result:
技术图片

[C] 可变参数变量

标签:return   const   string   end   http   i++   count   tor   char*   

原文地址:https://www.cnblogs.com/tailiang/p/12268033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!