今天下午在蹭计算机科学与技术学院的《数据结构》课时,意外学到了如何使用变长参数表。本来嘛我学习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);
}
自然,如果你对这个函数片段有独特的体会,还请不吝赐教!小弟先谢了!