2011-05-13 167 views
2

有一個功能avg(int, ...)它計算輸入整數的平均數,如何將可變參數傳遞給接受可變參數的函數?

avg(1,2,3) = 2, avg(2,3,4,5,6) = 4 

現在我有需要使用avg()得到他們的平均值,
整數數組,但數組的大小是動態的,也許從stdin或從文件中讀取。

代碼示例:

int i, num; 
scanf("%d", &num); 
int *p = malloc(num * sizeof(int)); 
for(i = 0; i < num; ++i) 
    scanf("%d", &p[i]); 
// what should I do now? 
// avg(p[0], p[1],....) 

注意,avg()函數只應調用一次。 avg()函數只是一個例子,實函數比這個更復雜。

回答

0

只要通過pp可以指向的元素的數量即可。

float computeAverage(int *p, int count) ; // count being `num` in this case. 

在功能方面,有一個循環迭代訪問0計數-1且其中的所有元素的總和,可以計算。循環後,只需返回sum/count這是平均值。

+0

感謝您的快速回復。實際上,這只是一個示例函數,實際問題更加複雜,我必須使用預定義的函數,而不是創建自己的實現。 – tfengjun 2011-05-13 02:04:14

+1

@tfengjun - @davmac建議除了傳遞指針之外,沒有任何便攜的方法可以做到這一點。祝你好運。 – Mahesh 2011-05-13 02:05:45

+0

你能給我一個關於如何以*非便攜*的方式處理它的提示嗎?因爲我的代碼只能在Linux x86上運行。 – tfengjun 2011-05-13 02:12:12

4

有沒有便攜的方式來做到這一點。大多數情況下,當可變參數函數存在時,也有一個變體直接接受數組參數。

+0

的確有一個可變參數函數,但沒有一個接受一個數組。我在Linux下的x86上做這個,有沒有什麼竅門可以解決這個問題? – tfengjun 2011-05-13 02:07:30

+0

您可以使用gcc的__builtin_apply()函數(檢查gcc文檔),但它需要知道ARGUMENTS數據的格式(沒有記錄,並且依賴於平臺)。 – davmac 2011-05-14 04:15:21

相關問題