2017-05-22 171 views
2

是否可以這樣做?數組參數無變量初始化

void putAverage(float *avg, int *arrData, int size) { 
    int i,sum = 0; 
    for(i = 0;i < size;i++) { 
     sum += *(arrData + i); 
    } 
    *avg = sum/size; 
} 

int main() { 
    float i; 
    putAverage(&i, {1, 2, 3, 4, 5}, 5); 
    printf("%f\n",i); 
} 

,因爲如果我運行它,它會顯示錯誤這樣

error: expected expression before '{' token 
error: too few arguments to function 'putAverage' 
note: declared here 

,如果有可能,請改正的,如果不是請給我做的最好的方式。

+5

'{1,2,3,4,5}' - >'(INT []){1,2,3,4,5 }','* avg = sum/size;' - >'* avg =(float)sum/size;' – BLUEPIXY

+1

使用'arrData [i]'比'*(arrData + i)'更簡單 - 沒有性能差異。 –

回答

2
#include <stdio.h> 

void putAverage(float *avg, const int *arrData, int size) { 
    int i,sum = 0; 
    for(i = 0;i < size;i++) { 
     sum += *(arrData + i); 
    } 
    *avg = (float)sum/size; 
} 

int main() { 
    float i; 
    putAverage(&i, (const int[]){1, 2, 3, 4, 5}, 5); 
    printf("%f\n",i); 
    return 0; 
} 

閱讀answer瞭解更多。

(const int[]){ 1, 2 ,3 ,4 ,5 }是相同

int arr[] = {1, 2, 3 ,4 ,5 }; 
    foo(arr); //Passing the array 

const被添加,以確保我們不會錯誤地修改數組。

(float)sum爲類型轉換的整數除法並存儲爲浮子

+0

好的代碼,但你也應該解釋你做了什麼改變,爲什麼 –

+0

謝謝@ M.M提高我的答案的指針。 –

+0

感謝您的解釋傢伙 –