2015-10-31 235 views
1

我正在編寫一個程序來計算兩個數組的值。我在傳遞函數和使用數組時遇到了問題。這裏是我的代碼:使用數組作爲函數參數

#include <stdio.h> 
#include <string.h> 
#include <math.h> 

const int MAX_STRING = 100; 

double mean(double mean_array[]){ 
    double mean; 

    for (int i=0; i<=2000000; i++){ 
     mean = mean + mean_array[i]; 
    } 

    mean = mean/2000000; 

    return mean; 

} 

double stan_dev_seq(double stan_array[]){ 

    double mean = mean(stan_array); 

    double a; 

    for (int i=0; i<=2000000; i++){ 
     a = a + pow(stan_array[i]-mean, 2); 
    } 

    a = sqrt(a/2000000); 

    return a; 
} 

int pearson_seq(void){ 

    double a[2000000]; 
    double b[2000000]; 

    double mean_a; 
    double mean_b; 

    for (int i=0; i<=2000000; i++){ 
     a[i] = sin(i); 
     b[i] = sin(i+2); 

    } 

    double stan_dev_a = stan_dev_seq(a); 
    double stan_dev_b = stan_dev_seq(b); 

    return 0; 
} 

int main(void) { 
    pearson_seq(); 

return 0; 
} 

,這裏是我的錯誤:

person_mpi.c: In function ‘stan_dev_seq’: 
person_mpi.c:22:16: error: called object ‘mean’ is not a function or function pointer 
    double mean = mean(stan_array); 
       ^
person_mpi.c:22:9: note: declared here 
    double mean = mean(stan_array); 
     ^

我真的不知道是怎麼回事,任何幫助,將不勝感激。

+0

使用您的變量不同的名稱和功能 –

回答

2

在相同的範圍內,您不能聲明兩個具有相同名稱的變量。請更改變量名稱mean或更改函數名稱mean

函數stan_dev_seq中的變量名mean隱藏函數mean的名稱。

0

double mean = mean(stan_array);

你有一個叫做平均變量,編譯器正在考慮第二mean也指這個變量,而不是你的函數。給他們不同的名字。

0

您正在嘗試撥打mean,這是您的mean函數中的一個簡單變量的。只要將其重命名爲不同的東西:

double N = mean(...); 
0
  • 名稱衝突。更改stan_dev_seq中的局部變量mean的名稱。
  • 您在堆棧上分配非常大的陣列,並且可能導致分段錯誤。考慮使用malloc在堆上分配它們或使它們成爲靜態變量。
  • 您不能訪問a[2000000]b[2000000]或任何等價物,因爲它們超出範圍。
  • 函數mean中的局部變量mean未被初始化。你應該初始化它。

固定碼:

#include <stdio.h> 
#include <string.h> 
#include <math.h> 

const int MAX_STRING = 100; 

double mean(double mean_array[]){ 
    double mean = 0; 

    for (int i=0; i<2000000; i++){ 
     mean = mean + mean_array[i]; 
    } 

    mean = mean/2000000; 

    return mean; 

} 

double stan_dev_seq(double stan_array[]){ 

    double mean_data = mean(stan_array); 

    double a; 

    for (int i=0; i<2000000; i++){ 
     a = a + pow(stan_array[i]-mean_data, 2); 
    } 

    a = sqrt(a/2000000); 

    return a; 
} 

int pearson_seq(void){ 

    static double a[2000000]; 
    static double b[2000000]; 

    double mean_a; 
    double mean_b; 

    for (int i=0; i<2000000; i++){ 
     a[i] = sin(i); 
     b[i] = sin(i+2); 

    } 

    double stan_dev_a = stan_dev_seq(a); 
    double stan_dev_b = stan_dev_seq(b); 

    return 0; 
} 

int main(void) { 
    pearson_seq(); 

    return 0; 
} 
0

更改命名。變量均值和函數的意思應該有不同的命名。 並初始化平均變量。 這應該工作(順便說一句我減少了總人數的原因就引起了我的機器上SOF)

double calc_mean(double mean_array[]){ 
    double mean=0; 

    for (int i = 0; i <= 2000; i++){ 
     mean = mean + mean_array[i]; 
    } 

    mean = mean/2000; 

    return mean; 

} 

double stan_dev_seq(double stan_array[]){ 

    double mean = calc_mean(stan_array); 

    double a=0; 

    for (int i = 0; i <= 2000; i++){ 
     a = a + pow(stan_array[i] - mean, 2); 
    } 

    a = sqrt(a/2000); 

    return a; 
} 

int pearson_seq(){ 

    double a[2000]; 
    double b[2000]; 

    for (int i = 0; i <= 2000; i++){ 
     a[i] = sin(float(i)); 
     b[i] = sin(float(i + 2)); 

    } 

    double stan_dev_a = stan_dev_seq(a); 
    double stan_dev_b = stan_dev_seq(b); 

    return 0; 
} 

int main(void) { 
    pearson_seq(); 

    return 0; 
} 
+1

不要訪問超出範圍('一[2000]','b [2000]'等)! – MikeCAT