我一直在尋找一種方式來的參數數目不定傳遞給一個函數,當我遇到做到這一點使用va_list
,va_start
和STDARG.H的va_end
的方式來如給出的程序here所示。
但是無法找到任何方式來訪問傳遞給函數的無限個參數的隨機方式。隨機訪問中的C函數的參數的數量不定
使用stdarg.h頭文件中的va_list
的方式是按順序訪問參數。一旦讀完了一個論點,就不會有回頭。
有沒有辦法隨機訪問這些參數?
編輯:我被建議發佈代碼而不是包含它的頁面的鏈接。所以這裏是:
#include <stdarg.h>
#include <stdio.h>
/* this function will take the number of values to average
followed by all of the numbers to average */
double average (int num, ...)
{
va_list arguments;
double sum = 0;
/* Initializing arguments to store all values after num */
va_start (arguments, num);
for (int x = 0; x < num; x++)
{
sum += va_arg (arguments, double);
}
va_end (arguments); // Cleans up the list
return sum/num;
}
int main()
{
printf("%f\n", average (3, 12.2, 22.3, 4.5));
/* here it computes the average of the 5 values 3.3, 2.2, 1.1, 5.5 and 3.3
printf("%f\n", average (5, 3.3, 2.2, 1.1, 5.5, 3.3));
}
把每個人放在一個數組? –
@WeatherVane我在想同樣的事情,只是做一個函數,讀取va_list中的參數並將它們保存在數組中?這可能不是你想要做的,但是然後添加一些精確度。 – xoxel
你仍然需要知道類型和參數的數量(printf通過走格式字符串來做到這一點)BTW:對函數可以採用的參數數量也有嚴格的限制。 – joop