[英]Error in C program in Dynamic memory allocation
我在 ubuntu18.10 操作系統中使用 gcc 編譯器。 而且我不知道為什么這個程序會給出錯誤,甚至無法理解錯誤。 程序如下,我也提出了錯誤。
#include<stdio.h>
#include<stdlib.h>
float Average(int*, int);
int main()
{
int *arr;
int n;
scanf("%d",&n);
float sum;
arr = (int *)malloc(n * sizeof(int));
for(int i=0;i<n;i++)
scanf("%d",&arr[i]);
sum = Average(int *arr, int n);
printf("%f\n",sum);
return 0;
}
float Average(int *arr, int size)
{
int sum;
int n = size;
printf("arr: %p\n",&arr);
printf("size: %p\n",&size);
printf("sum: %p\n",&sum);
for(int i=0;i<n;i++)
{
sum += arr[i];
}
return (sum * 1.0f) / size;
}
錯誤是:
Test.c: In function ‘main’:
Test.c:16:16: error: expected expression before ‘int’
sum = Average(int *arr, int n);
^~~
Test.c:16:8: error: too few arguments to function ‘Average’
sum = Average(int *arr, int n);
^~~~~~~
Test.c:4:7: note: declared here
float Average(int*, int);
^~~~~~~
請幫我找出原因和任何參考資料以清楚地理解這個概念。 謝謝
sum = Average(int *arr, int n);
類型說明符是你在函數的聲明和定義中給出的東西,而不是在調用中給出。 你要:
sum = Average(arr, n);
您可能想要檢查的其他一些事項。
一、 int sum;
在Average()
中,不會將該值初始化為零,而是將其設置為某個任意值。 當你只是將整數添加到它時,這不會很好地結束。 它應該是:
int sum = 0;
其次,除非您使用大量浮點數數組,否則最好使用double
以獲得更大的范圍和精度。
考慮到這些,我可能會編寫函數:
double Average(int *arr, int size) {
double sum = 0;
for (int i = 0; i < size; ++i)
sum += arr[i];
return sum / size;
}
當你調用一個函數時,你沒有指定參數的類型。 那是語法錯誤。 如果您查看調用printf
,您會發現您沒有在那里指定參數類型。 您自己的函數也是如此。
所以改變這個:
sum = Average(int *arr, int n);
對此:
sum = Average(arr, n);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.