【发布时间】:2016-10-05 08:13:38
【问题描述】:
首先,我已经看过这里展示的示例:
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 );
有谁知道我为什么会收到这个错误?
如果您能解释我的错误或将我指向解释它的来源,我将非常感谢您的帮助。
【问题讨论】:
-
再次查看错误信息。它真的告诉你所有你需要知道的。如果你仍然不知道,那么回到一本书,阅读更多关于地址运算符 (
&) 及其作用的信息。无论如何,您都需要这样做,因为您确实在不止一个地方滥用了它(例如,我建议您也仔细看看scanf电话)。 -
你需要知道
Pi已经是一个指针,而&Pi是一个指向指针的指针,一个双指针。所以电话应该是CalcPi(Pi, iterations); -
选择一种语言。在 C++ 中,答案很简单,“使用 std::vector”。
-
好的,我为你选择了一种语言,去掉了 C++ 标签。
-
如果你使用malloc,你也应该看看free()。
标签: c