动态数组更改内存地址位置

时间:2013-01-06 11:16:51

标签: c++ arrays pointers dynamic

我遇到了一个小问题,并且不太了解我想要做的事情的语法。见下文:

float* ParticleSystem::GetMinLifeTime()
{
    return &minLifeTime;
}

我想声明一个动态数组,然后将元素0的值更改为指向minLifeTime内存位置。到目前为止我的尝试是:

float* lifeTimeNumbers = new float[LIFETIME_STRINGS_SIZE];


lifeTimeNumbers[0] = *activeParticleSystem->GetMinLifeTime();

我的理解是,我在将它们添加到数组时取消引用这些值。这不是我想要的。我真的想将lifeTimeNumbers [0]的内存位置更改为GetMinLifeTime()返回的内存位置。我能做这样的事吗?

干杯

4 个答案:

答案 0 :(得分:1)

你不能改变数组[0]的地址,因为数组基本上是一个内存区域,而不是一个数字而不是单个指针。

您的'isssue'可以使用**来完成..然后您可以[0]存储指向值的指针

答案 1 :(得分:1)

你的问题主要是关于如何通过方法Y解决问题来实现X.

方法Y实际上毫无意义(这被称为 XY问题)。

不是专注于Y,而是直接做X:

#include <vector>

double ParticleSystem::minLifeTime() const
{
    return minLifeTime_;
}

int main()
{
    std::vector<double> lifeTimeNumbers;

    ParticleSystem activeParticleSystem = ...;
    lifeTimeNumbers.push_back( activeParticleSystem.minLifeTime() );
}

答案 2 :(得分:0)

  

我真的想将lifeTimeNumbers [0]的内存位置更改为GetMinLifeTime()返回的内存位置

您需要做的就是:

float *lifeTimeNumbers = activeParticleSystem->GetMinLifetime();

现在你有一个指向数组第一个元素的指针。

答案 3 :(得分:0)

你想要的是一个指向浮点数的指针数组,而不是一个浮点数组。要实现这一点,你必须像这样声明数组

float** lifeTimeNumbers = new float*[LIFETIME_STRINGS_SIZE];
lifeTimeNumbers[0] = activeParticleSystem->GetMinLifeTime();

但为什么不使用像这样的矢量容器

std::vector<float*> vec;
vec.push_back(activeParticleSystem->GetMinLifeTime());