Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1428827
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-03-12 12:13:55

1、是什么?
顾名思义,变参函数就是传入的参数是变化,不确定的。
2、为什么?
为什么需要变参函数?对于传输参数的个数等不确定的时候怎么办,就像C标准库中的printf()函数等?这个时候就是变参函数的用武之地。
3、怎么实现?

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdarg.h>
  3. int sum(int num,...)
  4. {
  5.     va_list arg = NULL;
  6.     va_start(arg,num);
  7.     int rt = 0;

  8.     while(num-- > 0)
  9.     {
  10.         rt += va_arg(arg,int);
  11.     }
  12.     va_end(arg);
  13.     return rt;
  14. }
  15. void main()
  16. {
  17.     int rt_sum = sum(3,100,200,300);
  18.     printf("%d\n",rt_sum);
  19. }
注:(1)包含头文件
     (2)接口函数:va_start(),初始化;va_arg(),获取参数;va_end(),结束。

zz:实现类似于printf()的接口函数,使用C标准库的printf()接口函数

点击(此处)折叠或打开

  1. void myPrintf(const char *format,...)
  2. {
  3.     char c,*str;
  4.     int i;
  5.     double flt;
  6.     va_list va;
  7.     va_start(va,format);
  8.      
  9.     while(*format){

  10.         if('%' != *format){
  11.             putchar(*format++);
  12.             continue;
  13.         }
  14.         switch(*++format){
  15.             case 'd':{
  16.                 i = va_arg(va,int);
  17.                 printf("%d",i);
  18.             }break;
  19.             case 'f':{
  20.                 flt = va_arg(va,double);
  21.                 printf("%f",flt);
  22.             }break;
  23.             case 's':{
  24.                 str = va_arg(va,char*);
  25.                 printf("%s",str);
  26.             }break;
  27.             case 'x':{
  28.                 i = va_arg(va,int);
  29.                 printf("%x",i);
  30.             }break;
  31.             case 'o':{
  32.                 i = va_arg(va,int);
  33.                 printf("%o",i);
  34.             }break;
  35.             default:{
  36.                 putchar(*format);
  37.             }break;
  38.         }
  39.         format++;  
  40.     }   
  41.     va_end(va);
  42. }
阅读(396) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~