我想知道如何在 C++ 的 for 和 while 循环中正确使用指针。通常我使用 C 而不是 C++ 来编写。这次我使用 C++ std 库的唯一原因是我可以在代码中使用其他数学函数所需的复数函数。
作为作业的一部分,我们得到了以下函数声明。我写的部分在函数中有注释。
typedef std::complex<double> complex;
// Evaluates a polynomial using Horner's approach.
// Inputs:
// [coeffs, coeffs_end) - polynomial coefficients, ordered by descending power
// x - point of evaluation
// Outputs:
// p - value of polynomial at x
// dp - value of polynomial derivative at x
// ddp - value of polynomials second derivative at x
//
template<typename T>
inline void poly_val(T const* coeffs, T const* coeffs_end, T x, T & p, T & dp, T & ddp)
{
//MY CODE HERE
int i = 0;
const T *pnt = coeffs;
while(pnt != coeffs_end){
//Evaluate coefficients for descending powers
p += coeffs(i)*pow(x,((coeffs_end-1)-i));
pnt++;
i++;
}
}
该函数不知道数组的长度,所以我猜测停止条件是指针“coeffs_end”,它指向数组“coeffs”中的最后一个值。我可以这样有条件地使用指针吗? (传统上我会将数组的长度输入函数,但我们不能修改声明)
如果我这样做,我在编译时会一直收到错误消息(我没有收到):
C2064:term foes 不计算为带 1 个参数的函数
对于以下行:
p += coeffs(i)*pow(x,((coeffs_end-1)-i));
最佳答案
coeffs(i)
正在调用采用整数参数的函数的约定。但在你的情况下,它是一个指针。因此,您需要使用 []
运算符来访问其索引处的元素。
((coeffs_end-1)-i)
也解析为一个地址位置。您需要取消引用它以获取该位置的值。
关于c++ - 将指针用于条件 while/for 循环会在编译时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7707412/