C语言函数可变参数处理简介
程序员文章站
2022-06-24 20:48:38
在c语言编程中,有时会遇到函数可变参数的情况,c语言没有像C++那样具有函数重载的机制,不过c语言还是考虑到了这方面的问题,设计了几条语句来处理这种情况。
下面就以实例来说明这个...
在c语言编程中,有时会遇到函数可变参数的情况,c语言没有像C++那样具有函数重载的机制,不过c语言还是考虑到了这方面的问题,设计了几条语句来处理这种情况。
下面就以实例来说明这个语句的使用,部分说明就包含在程序中了吧。
1、求取一个可变数组的均值
// ConsoleApplication8.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include #include #include //这个头文件是必须的 float meanvalue(int, ...);//声明函数体 int main() { int result = 0; result = meanvalue(3, 1, 5, 6);//在此你也可以输入meanvalue(4, 1, 5, 6,4); printf("the array average is %d\n", result); system("pause"); return 0; } float meanvalue(int n, ...)//可变参数至少要有一个明确的参数哦,...为省略的参数 { va_list varList;//定义va_list变量varList,该变量是指向参数的指针 va_start(varList, n);//va_list变量varList中最后一个固定参数 float sum = 0.0; for (int i = 0; i < n; i++) { sum += va_arg(varList, int);//返回值即为当前可变参数值 } va_end(varList); // 结束可变参数的获取,va_start 和 va_end 不返回值 return sum / n; }
2、打印函数的不同情况
// ConsoleApplication8.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include #include #include #include void myprintf(char *fmt, ...) { va_list ap; int d; double f; char c; char *s; char flag; va_start(ap, fmt); while (*fmt) { flag = *fmt++; if (flag != '%') { putchar(flag); continue; } flag = *fmt++;//记得后移一位 switch (flag) { case 's': s = va_arg(ap, char*); printf("%s", s); break; case 'd': /* int */ d = va_arg(ap, int); printf("%d", d); break; case 'f': /* double*/ d = va_arg(ap, double); printf("%d", d); break; case 'c': /* char*/ c = (char)va_arg(ap, int); printf("%c", c); break; default: putchar(flag); break; } } va_end(ap); } int main() { char str[10] = "linuxcode"; int i = 1024; double f = 3.1415926; char c = 'V'; myprintf("string is:%s\n,int is:%d\n,double is:%f\n,char is :%c\n", str, i, f, c); }