将动态分配的数组从main传递到另一个函数

时间:2016-10-05 08:13:39

标签: c

首先,我已经看过这里提供的示例:

Passing dynamically allocated array as a parameter in C

我正在尝试将动态分配的数组作为参数传递给另一个函数。

void InputIterations(int *iterations);
void CalcE(long double *E, int iterations);

int main()
{
     int iterations;  
     long double *E;

     InputIterations(&iterations);

     E = (long double *) malloc(iterations * sizeof(long double));

     CalcE(&E, iterations);
}

void InputIterations(int *iterations)
{
     printf("Enter a number of iterations: ");
     scanf("%d", iterations);
}

void CalcE(long double *E, int iterations)
{
     long double sum = 0;
     int i;
     for(i=0; i<iterations; i++)
     {
          sum = sum + /*formula for calculating irrational constant e*/
          *E = sum;
          E++;
     }
 }

然而,当我编译我的代码时,我收到以下错误:

  

error: cannot convert ‘long double**’ to ‘long double*’ for argument ‘1’ to ‘void CalcE(long double*, int)’ CalcE( &E, iterations );

有谁知道我为什么会收到此错误?

如果你能解释我的错误或指出我解释它的来源,我将非常感谢你的帮助。

2 个答案:

答案 0 :(得分:3)

CalcE(&E, iterations);

应该是

CalcE(E, iterations);

希望我帮助

答案 1 :(得分:3)

下面:

CalcE(&E, iterations);

您获取E的地址(类型long double *)并将其作为参数传递给CalcECalcE接受指向long double的第一个参数。但是当你取一个地址E时,实际上你会得到指向long doublelong double**)指针的指针,而这不是指向long double的指针。这就是你的错误告诉你的事情:

  

错误:无法将'long double **'转换为'long double *'作为参数      '1'到'void CalcE(long double *,int)'CalcE(&amp; E,iterations);

所以你应该:

CalcE(E, iterations);