在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++ 等语言将数组的内容复制到另一个数组吗?