使用数组作为函数参数

时间:2015-10-31 15:39:17

标签: c arrays function

我正在编写一个程序来计算两个数组的值。我在我的函数中传递和使用数组时遇到了麻烦。这是我的代码:

#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);
         ^

我不确定发生了什么,任何帮助都会受到赞赏。

5 个答案:

答案 0 :(得分:2)

在同一范围内,您无法声明两个具有相同名称的变量。更改变量名称mean或更改函数名称mean

函数mean中的变量名stan_dev_seq隐藏了函数mean的名称。

答案 1 :(得分:0)

double mean = mean(stan_array);

你有一个名为mean的变量,编译器认为第二个mean也引用了这个变量,而不是你的函数。给他们不同的名字。

答案 2 :(得分:0)

您正试图在mean功能中调用mean,这是一个简单的变量。只需将其重命名为不同的东西:

double N = mean(...);

答案 3 :(得分:0)

  • 名称冲突。在mean
  • 中更改本地变量stan_dev_seq的名称
  • 您在堆栈上分配非常大的数组,可能会导致分段错误。考虑使用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;
}

答案 4 :(得分:0)

更改命名。变量均值和函数均值应具有不同的命名。 并初始化平均变量。 这应该工作(BTW我减少了因为它在我的机器上引起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;
}