簡體   English   中英

動態內存分配中的 C 程序錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM