您的位置:首页 > 其它

彤姐的程序篇(四)关于支持可变参数的函数.

2016-11-09 10:27 232 查看
对于可变参数函数(需要加头文件为:#include<stdarg.h>)刚刚接触到这个概念的我也是一脸懵逼,完全不知道怎么搞,在翻阅过大量的资料和经过一系列的摸爬滚打之后,我写出了以下几个程序,都是关于怎么使用可变参数函数的,希望对刚刚学习c的小伙伴们一丢丢帮助。

       废话少说,扔程序先偷笑。
程序一:(用可变参数求平均值)

#include<stdio.h>

#include<stdarg.h> //可变函数必须要引入的头文件

int average(int n,...)  //只需要引入传入数据的个数,后边的具体数据用"..."代替

{
int i=0;
int sum=0;
va_list arg;//强制类型转化char* arg
va_start(arg,n);//初始化,指向n前(下文有注释1)的第一个参数,即(1,2,3,4,5)中的1。
for(i=0; i<n; i++)
{
sum+=va_arg(arg,int);//每次获取一个变量,执行一次,往前移动一次。
}
va_end(arg);//结束可变参数函数的使用
return sum/n;

}

int main()

{
int i=average(5,1,2,3,4,5);
printf("%d",i);
system("pause");
return 0;

}

程序二:(用可变参数求最大值)

#include<stdio.h>

#include<stdarg.h>

int MAX(int n,...)

{
int i=0;
int max=0;
int t=0;
va_list arg;
va_start(arg,n);
max=va_arg(arg,int);//将(1,2,3,4,7)中的1赋给max
for(i=0; i<n-1; i++)
{
   t=va_arg(arg,int);//将(1,2,3,4,7)中的2赋给t,因为va_arg(arg,int)每执行一次,往前移动一个变量
if(max<t)
{
max=t;
}
}
va_end(arg);
return max;

}

int main()

{
int gat;
gat=MAX(5,1,2,3,4,7);
printf("%d",gat);
system("pause");
return 0;

}


程序三:(用可变参数实现printf函数)

#include<stdio.h>

#include<stdarg.h>

void my_printf(char *arr,...)

{
va_list arg;
va_start(arg,arr);
while(*arr)
{
if(*arr=='s')
{
puts(va_arg(arg,char*));//碰到's'则输出字符串
}
if(*arr=='c')
{
putchar(va_arg(arg,char));//碰到'c'则输出一个字符
}
arr++;
}
va_end(arg);

}

int main()

{
my_printf("s  ccc","hello",'b','i','t');
system("pause");
return 0;

}

注释1:上文所说的n前而非n后是因为括号中的数字在栈中存储是由高地址向低地址存储的。如下图所示





以上是我对可变参数函数的一点浅识,我用自己的话总结了各个语句背后所代表的实质含义,勿喷勿喷

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  可变参数函数