----可变参数列表---让函数传递参数个数不固定

可变参数:就是在函数传递时,希望不固定函数参数的个数进行传递,让一个函数在不同的时候接受不同数目的参数!

注意:参数列表中至少有一个命名参数;

内部实现,其实可变参列表是通过宏来实现的,这些宏定义于stdarg.h这个头文件声明了一个类型va_list 和三个宏---------va_start , va_arg , va_end 

现在看看这个强大的功能:

看个代码:

<span style="font-size:14px;">#include<stdio.h>
#include<stdarg.h>

float savage(int n,...)//stdarg.h里面的宏,直接使用
{
	va_list arg; //一个char*的指针 
	int count;
	float sum = 0;
	va_start(arg,n); // 是让这个arg的指针首先指向栈顶,然后再绕过int n
	for(count = 0;count < n;count ++)
	{
		sum += va_arg(arg,int);//让arg的指针先指向后面一个数,然后再减去一个int(基本类型)再解引用
	}
	va_end (arg);
	return (sum/n);
}
float avage(int n,...)//我自己写的把内部的实现,
{
	char *p;
	int i = 0;
	float sum = 0;
	//va_start(arg,n);//让头指针指向头
	p = (char *)(&n)+sizeof(n);
	for(i = 0;i < n;i ++)
	{
		//sum += va_arg(arg,int);
		sum += *(int* )((p += sizeof(int)) -sizeof(int) );
	}
	*p = NULL;
	return (sum/n);
}
int main()
{
	printf("%f\n",savage(7,44,56,78,90,65,87,9));
	printf("%f\n",savage(3,2,'s',3));
	printf("%f\n",avage(7,44,56,78,90,65,87,9));
	printf("%f\n",avage(3,2,'s',3));
	return 0;
}</span>
这就是可变参的强大功能!简化了好多步骤.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值