C语言之简单的程序练习-关于支持可变参数的函数.

对于可变参数函数(需要加头文件为:#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后是因为括号中的数字在栈中存储是由高地址向低地址存储的。如下图所示

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值