【问题标题】:Copy the contents of the array in c++在c++中复制数组的内容
【发布时间】:2021-07-29 23:03:56
【问题描述】:

下面的简化代码不正确。我想写入提供给operator() 的数组YY_,想知道怎么做?似乎问题在于它假设复制指针复制数组的内容?!

double *computeY(double const *const *xx){
  const int i0 = 0;
  const int i1 = 1;
  static double YY[2];
  YY[0] = xx[i0][0] + xx[i1][0];
  YY[1] = xx[i0][1] + xx[i1][1];
  return YY;
} 

struct computeYFunctor{
   computeYFunctor(){}
   bool operator()(double const *const *xx_, double* YY_) const{
     YY_ = computeY(xx_);
     return true;
  }
 };

【问题讨论】:

  • 复制指针不会复制数组的内容。
  • 您将xx_ 传递给函数。将YY_ 作为第二个参数传递有什么问题?无需return 任何东西。其他一切都没有改变。
  • 复制指针就是这样做的,复制指针。目标是什么?我在你的问题中没有找到。
  • 指针的副本是指向同一个对象的另一个指针。指针是它们可能指向的对象的独立实体。
  • @TedLyngmo 我只是按照这里的方式建议使用指针作为返回值然后遍历数组:tutorialspoint.com/cplusplus/… 仍然不确定有什么区别

标签: c++ arrays pointers


【解决方案1】:

是的,指针可能很困难。我对此表示怀疑,但我没有时间检查我的代码,而且这里的人比我更有资格做到这一点的能力要高出 100,000 倍......但我们到了。

您需要将指向 YY 的指针作为参数传递给 computeY()

void computeY(double const *const *xx, double *YY ){
  const int i0 = 0;
  const int i1 = 1;                // array is  (pointer math)
  YY[0] = xx[i0][0] + xx[i1][0];   // YY[0] is *(YY+0)=val
  YY[1] = xx[i0][1] + xx[i1][1];   // YY[1] is *(YY+1)=val
  // So the two lines YY[0] reached out to the addresses YY+0 and YY+1
  // And modified the data.
} 

struct computeYFunctor{ 
   computeYFunctor(){}
   bool operator()(double const *const *xx_, double* YY_) const{
     computeY(xx_, YY_);
     return true;
  }
 };

祝你好运,我希望这会有所帮助。我在工作中没有做太多的运算符重载,所以我很有可能错过了一个 12 岁的孩子会在这里发现的东西。

【讨论】:

  • 感谢它的工作。我不确定指针和数组是如何相关的。因为这里它说我们可以通过指针遍历数组:flylib.com/books/en/2.253.1/…
  • 我再次查看了您的代码,我认为它可能在“C”中工作。但是对于 C++,我认为编译器决定 double* 和 double[2] 是不同的东西。也许是一个演员 return (double*)YY;而不是返回 YY;可能已经让编译器满意了。在内存拥有所有权的 RUST 语言中,从内部传出指针是安全的,但在“C”/“C++”中,通常很难确定谁分配了指针。所以我总是喜欢传入指针而不是让它们从函数中传出。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 2021-09-26
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多