2015-10-31 177 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