可變參數列表的實現--平均值

可變參數列表的實現--平均值

c語言中用可變參數列表的原因:
cpp文件中參數可以初始化,則實參中用幾個參數寫幾個,但是c中形參不可以初始化,所以引出可變參數列表,頭文件爲stdarg.h,使用宏stdarg
va_list類型   arg聲明的變量名    eg:va_list arg //訪問參數列表未確定部分
宏stdarg使用了三種宏 : 
va_start(arg,val)初始化         //將arg_ptr設置爲傳遞給該函數參數列表的第一個可選參數,\val已確定參數列表最後一個參數
va_arg(arg,int)讀取 //arg_ptr給出的位置檢索type的值,並將arg_ptr指向列表\

中的下一個參數,使用type的範圍確定下一個參數的類型。int是下一個參數的類型
va_end(arg)結束 //重置指向NULL的指針


<span style="font-size:18px;">#include<stdio.h>
#include<stdarg.h>
double average(int val,...)
{
	va_list arg;
	double sum=0.0;
	int i=0;
	va_start(arg,val);
	for(i=0;i<val;i++)
	{
		sum+=va_arg(arg,int);
	}
	va_end(arg);
	return sum/val;
}
int main()
{
	double ret=average(6,1,2,3,4,5,7);
	printf("%f\n",ret);
	return 0;
}</span>


測試結果如下圖:ret = (1+2+3+4+5+7)/6




說起可變參數列表我們可以想到printf函數:

如下是函數printf的實現:


#include <stdio.h>
#include<stdarg.h>

int printf(char* format, ...)
{
	va_list arg;
	va_start(arg, format);
	int n;
	n = vprintf(format, arg);
	va_end(arg);
	fprintf(stdout, "\n");
	return n;
}

int main()
{
	char* aaa = "hello world!";
	printf(aaa);
	return 0;
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章