我有一个double *result
的函数。我知道指针需要通过函数中的引用传递。当我使用void ComputeSeriesPointer(double x, int n, double *result);
在main中调用函数ComputeSeriesPointer(x, n, &result);
时,我收到错误:
cannot convert ‘double**’ to ‘double*’ for argument ‘3’ to ‘void ComputeSeriesPointer(double, int, double*)’
ComputeSeriesPointer(x, n, &result);
^
使用指针时,是不是都使用&
键传递了它们?课堂上的例子都是这样完成的。即使在互联网上,事情也是这样完成的。任何解释/澄清都会很棒。
我也使用c ++编译器(按照我的教授的指示)运行它,因为我正在使用pow
函数。
答案 0 :(得分:1)
如果没有看到完整的代码,我不确定你在做什么,但是如果你做的是这样的话:
void ComputeSeriesPointer(double, int, double*){
// ...
}
int main(){
double *x = ...;
ComputeSeriesPointer(1.0, 1, &x);
// ...
return 0;
}
然后,问题是&x
。 &
运算符用于提取变量地址。在这种情况下,你的变量已经是一个指针,所以写&x
你得到一个指向"的指针,换句话说就是double**
。这是你的问题。以这种方式调用您的函数:ComputeSeriesPointer(1.0, 1, x)
答案 1 :(得分:0)
该函数期望您传递实际double
变量的内存地址,而不是double*
指针变量的内存地址:
double result; // NOT double*!
ComputeSeriesPointer(x, n, &result);
你也可以这样做:
double result; // NOT double*!
double *presult = &result;
ComputeSeriesPointer(x, n, presult);
答案 2 :(得分:0)
错误消息表明result
的类型已经double *
。如果变量已经是适当类型的指针,则不需要使用&
运算符。所以你应该做
ComputeSeriesPointer(x, n, result);
或者,您需要将来自result
的{{1}}变量的声明从double *
更改为double
。
答案 3 :(得分:0)
你可能正在这样做:
double *myNewResult;
...
ComputeSeriesPointer(x, n, &myNewResult);
通过这样做,您传递的是double*
而非double
的地址。您不需要double *myNewResult
,只需double myNewResult
。或者如果您需要myNewResult
成为double*
,您可以将其传递给这样的函数:
ComputeSeriesPointer(x, n, myNewResult);
答案 4 :(得分:0)
该函数声明为
void ComputeSeriesPointer(double, int, double*);
第三个参数的类型为double *
但你把这个函数称为
ComputeSeriesPointer(x, n, &result);
其中第三个参数的类型为double **
您需要调用类似
的功能ComputeSeriesPointer(x, n, result);
或者更改函数声明及其相应的定义,使第三个参数类型为double **
void ComputeSeriesPointer(double, int, double **);
答案 5 :(得分:-1)
将指针传递给函数 通过引用传递;指针是“引用”。 (C ++还引入了一些“引用”类型,它假装它不是指针,但这与你给出的代码示例无关。)
&运营商的意思是“地址”。它需要一个东西并返回指向该东西的指针。所以,
double x = 1; // this is a double
double *pointer_to_x = &x;
double **pointer_to_pointer_to_x = &pointer_to_x;
等等。
我们需要看一些代码调用ComputeSeriesPointer()才能正确回答,但我的猜测是你有:
double *result; // this kind of variable stores *the address of* a double-precision number.
ComputeSeriesPointer( x, n, &result );
但你真的想要:
double result; // this kind of variable stores a double-precision number.
ComputeSeriesPointer( x, n, &result );
这样您就可以传入您希望ComputeSeriesPointer()将结果写入的地址。