C++函數參數不確定怎麼辦?可變參數列表

一、爲什麼使用可變參數列表?

爲了解決原型函數只能顯示固定數目的參數的不足,C語言定義了一種訪問數目未定的參數列表的機制,這就是可變參數列表。

二、如何使用?

“聲明 開始 使用 結束”三步完成。

type fun(list_num,...)
{
    va_list vlist;//不定參數聲明
    va_start(vlist,vlist_num);//指明參數個數
    va_arg(vlist,type);//使參數偏移sizeof(type)字節
    va_end(vlist);//結束訪問
}

三、缺點

  • 無法判斷不定參數的個數(需另外傳參)
  • 無法使用隱式轉換(都當成是int)

第一點導致我們需要對參數個數進行另外指定(如下例中的 n_values);第二點導致必須確保傳入參數類型可靠性(不使用隱式轉換規則情況下)

四、一個例子:求平均值

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

double fun(int n_values, ...)
{
	va_list vlist;//... uncertain parameter
	int count = 0;
	double sum = 0;

	va_start(vlist, n_values);//start

	for (; count < n_values; count++)
	{
		sum += va_arg(vlist, double);//use,輸入需要保證“...”部分是double,即不可以發生隱式轉換
	}

	va_end(vlist);//end

	return sum / n_values;

}

int main()
{
	double result = fun(10, 1.0, 2.00, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0);
	printf("result =  %lf", result);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章