簡體   English   中英

使用數組作為函數參數

[英]Using an array as a function parameter

我正在編寫一個程序來計算兩個數組中的值。 我在函數中傳遞和使用數組時遇到麻煩。 這是我的代碼:

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

我不太確定發生了什么,將不勝感激。

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

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

double mean = mean(stan_array);

您有一個稱為均值的變量,編譯器認為第二個mean也指代此變量,而不是函數。 給他們起不同的名字。

您正在嘗試調用mean ,這是mean函數中的一個簡單變量 只需將其重命名為其他內容即可:

double N = mean(...);
  • 名稱沖突。 stan_dev_seq更改局部變量meanstan_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;
}

更改名稱。 可變均值和函數均值應具有不同的命名。 並初始化均值變量。 這應該可以工作(順便說一句,我減少了導致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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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