意外收获

来源:互联网 发布:气候变化 知乎 编辑:程序博客网 时间:2024/05/05 23:10

  今天下午在蹭计算机科学与技术学院的《数据结构》课时,意外学到了如何使用变长参数表。本来嘛我学习C语言就卡在了这里我就是看不明白如何调用这个函数,不过经老师一讲我搞懂了,原来这个函数在声明时是变长参数的如minprintf(char *fmt,...),而在调用时却必须是参数确定的如 minprintf("%d%d",a,b)。

   我认为这个函数另一个难点是使用了宏stdarg.h。这个宏在谭浩强的书《c语言程序设计》没有提到,所以这就成为了障碍!马上就要开始学习《数据结构》了,很是期待,虽然听说不好学,但是我相信"世上有难易乎,为之难者亦易乎;不为,易者亦难亦"!

现在把这个函数片段附在下方,当然高手一看就知道怎么回事:

#include<stdio.h>

/* minprintf函数: 带有可变参数表的简化的printf函数*/

void minprintf(char *fmt,...)

{

   va_list ap;

   char *p, *sval;

   int ival;

   double dval;

  

   va_start(ap, fmt);

   for(p=fmt; *p; p++)

   {
      if(*p != '%')

      putchar(*P);

      continue;

    }
    switch (*++p)

    {
       case 'd':
          ival = va_arg(ap, int);

          printf("%d", ival);

          break;

       case 'f':
          dval = va_arg(ap, double);

          printf("%f", dval);

          break;

       case 's':
          for (sval = va_arg(ap, char *); *sval; sval++)

          putchar(*sval);

          break;

       defualt:

          putchar(*p);

          break;

     }

  }

  ven_end(ap);

}

自然,如果你对这个函数片段有独特的体会,还请不吝赐教!小弟先谢了!

原创粉丝点击