【发布时间】:2014-07-23 23:36:04
【问题描述】:
我对如何使用返回参数从一个类中获取多个浮点数组感到困惑。这是一个简化的示例。
class Points
{
private:
float *x;
float *y;
float *z;
public:
void getCoordinates (float *retx, float *rety, float *retz);
}
void Points:: getCoordinates (float *retx, float *rety, float *retz)
{
retx=x;
rety=y;
retz=z;
}
当我在函数内部进行赋值时,指针值匹配。但是,一旦我离开该函数,这些值就会发生变化。指针的范围是否受到某种限制?
基于How to properly return an array (class member) in C++?,我认为不应该是这样。讨论表明不仅可以传递指针,而且通过指针对内存的更改将影响类的原始实例。正是我期望指针工作的方式。
我尝试过的一种解决方法是使用 memcpy
void Points::getCoordinates (float *retx, float *rety, float *retz)
{
memcpy(retx, x, sizeof(float)*numPoints);
memcpy(rety, y, sizeof(float)*numPoints);
memcpy(retz, z, sizeof(float)*numPoints);
}
这也是我想要的方式。这种方法的缺点是我需要在调用函数中分配正确的内存量,而且我使用的内存比我认为需要的要多。
【问题讨论】:
-
您需要将输入参数作为双指针或指针引用传递(即,您需要通过引用传递它们)。
-
一个类
Points存储 x、y 和 z 值的多个数组,听起来像 a bad idea。为什么不改用std::vector<Point>,Point有一个 x、y 和 z 值? -
@FredOverflow 我实际上并没有编写“积分”类。这似乎是最简单的例子。 :)
-
在函数返回后,您是否希望 retx/y/z 指向与 x/y/z 完全相同的数组,或者如果您想制作 副本他们?
-
关于如何命名这个问题的任何建议,以便未来的寻求者能够更好地找到它?我觉得现在的标题可能太笼统了。