2013-01-06 81 views
0

我有一個小問題,不完全理解我想要做的事情的語法。見下:動態數組變化的內存地址位置

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

我想聲明一個動態數組,然後更改元素0的值指向minLifeTime內存位置。我嘗試迄今已:

float* lifeTimeNumbers = new float[LIFETIME_STRINGS_SIZE]; 


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

我的思想的理解是將其添加到陣列時,我提領該值。這不是我想要的。我真的想將lifeTimeNumbers [0]的內存位置更改爲由GetMinLifeTime()返回的內存位置。我可以做這樣的事嗎?

乾杯

+0

你需要了解如何進行分配,被放置在內存中。代碼中的分配行將創建一個連續的內存塊,其中包含浮點數。浮點值的索引爲'i'的內存地址將是(sizeof float)小於索引爲'i + 1'的浮點值的內存地址。 **你不能改變**。所以,要麼你的數組是指針,但是每個引用都需要取消引用影響速度的指針,或者你需要兩個變量。一個是指向浮點的指針,另一個是浮點數組。如果你詳細說明你想要的內容,回答起來會更容易。 –

+0

我基本上想要一個我誤解了如何聲明的指針數組。我已經設法解決這個問題,但感謝您的幫助。 – Bushes

回答

1

你不能改變的地址[0]的數組作爲陣列是基本上一個區域的存儲器,而不是一個號碼而不是單個指針。

你「isssue」可以做到用一個** ..然後你可以有[0]存儲指向

0

我真的想改變lifeTimeNumbers的存儲位置[0值]()所GetMinLifeTime返回的內存位置

所有你需要做的是這樣的:

float *lifeTimeNumbers = activeParticleSystem->GetMinLifetime(); 

現在你有一個指向的第一個元素的指針陣列。

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()); 
} 
+0

我需要內存地址,因爲我需要對值進行更改,以便在粒子效果中進行更改。我不確定你的方法會起作用。 – Bushes

0

你需要的是一個指針數組,以花車,而不是float數組。爲了實現這一目標,你必須聲明數組這樣

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

,但爲什麼不直接使用矢量容器這樣

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

我不認爲有足夠的理由說實話。 – Bushes