c++ - 将指针用于条件 while/for 循环会在编译时出错

标签 c++ arrays pointers loops

我想知道如何在 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/

相关文章:

c++ - 在这种情况下可以强制转换指向成员变量的指针吗?

c++ - 通用阶跃函数的最佳数据结构是什么?

c++ - 从 C++ 中的数字输入动态创建矩阵

c++ - 如何在 C++ 中打乱二维数组

java - 如何将视频从 URI 转换为 byte[]

c - 使用confbridge.conf在app_confbrige.c asterisk-11.5.1中地址0xfffffffe超出范围

c - 在 void 指针的指针值处赋值

c++ - 为什么 const_cast 和 static_cast 到 const 引用没有效果?

c++ - 如果不直接使用,模板参数会丢失左值引用

php - 通过键合并两个数组