在c++中复制数组的内容

Posted

技术标签:

【中文标题】在c++中复制数组的内容【英文标题】:Copy the contents of the array in 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/… 仍然不确定有什么区别 【参考方案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++”中,通常很难确定谁分配了指针。所以我总是喜欢传入指针而不是让它们从函数中传出。

以上是关于在c++中复制数组的内容的主要内容,如果未能解决你的问题,请参考以下文章

我们可以用 C# 和 C++ 等语言将数组的内容复制到另一个数组吗?

如何在不循环的情况下将数组的内容复制到 C++ 中的 std::vector?

C++ 数组对复制构造函数和赋值运算符

C++ 向数组添加元素

如何在 C++ 中找到数组的确切大小? [复制]

无法将短裤复制到动态数组 C++