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

Dynamic array changing memory address locations

本文关键字:地址 位置 内存 改变 数组 动态      更新时间:2023-10-16

我有一个小问题,不太理解我想要做的语法。见下文:

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

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

float* lifeTimeNumbers = new float[LIFETIME_STRINGS_SIZE];

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

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

欢呼

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

你的"问题"可以用**..然后可以让[0]存储指向值

的指针

你的问题主要是关于如何解决方法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() );
}

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

你所需要做的就是:

float *lifeTimeNumbers = activeParticleSystem->GetMinLifetime();

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

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

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

但是为什么不直接使用像这样的vector容器呢

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