2010-04-05 60 views
1

在我的應用程序中,我創建了TList類型列表,其中我存儲了每個3項的1個字符串和2個浮點(實數)值的指針。如何獲得指針指向的浮點值?

aList.Add(@sName); //string 
aList.Add(@x1); //float 
aList.Add(@x2); //float 

的話,我想從列表中獲取值出來,但我只能做字符串

sStr := string(lList.items[i]); 

,但我無法得到浮點值作爲a := real(lList...)將導致無效的類型轉換錯誤。

那麼我該如何獲得浮點值呢?
當然,我有一個問題,如果該字符串鑄造將實際給我的字符串值。我不擅長指針,所以我不知道該怎麼做。

+0

有一些數據丟失,但做這種分配可能會導致訪問衝突。將字符串轉換爲指針時,不會增加引用計數。所以當sName超出範圍時,你的指針可能會失效。您的浮動值也一樣。當X1和X2變量超出範圍時,指針不再有效。 至於無效的類型轉換,你可以像這樣做一個類型轉換,你可能只是忘了取消引用指針。 Double(lList [I] ^) – 2010-04-06 04:27:23

回答

5

我建議你創建一個記錄:

TMyRecord = record 
    sName: String 
    x1: Double; 
    x2: Double; 
end; 

,然後創建一個該類型的通用清單:

var 
    MyRecordList: TList<MyRecord>; 

,並從那裏,你應該能夠輕鬆訪問您的數據在列表中。

試圖將數據存儲在具有特定位置的特定數據類型的TList中,這樣就更麻煩了。

+1

+1。我正要說同樣的話,但尼克打敗了我。你可以在'Generics.Collections'單元中找到通用的TList。但是它在Delphi 2009中有一些奇怪的編譯器怪癖,可能並不總是正確的。如果你有問題,我建議升級到德爾福2010年,當涉及到泛型時,德爾福2010年更穩定。 – 2010-04-05 14:32:16

2

我同意尼克。但是,無論如何,你可以做你正在做的事情。

如果a是類型 '真正的' 的,

a := Real(aList.Items[i]^); 

,或者如果 'A' 是指向一個真實的(^真實),

a := aList.Items[i]; 

字符串,存儲第一個元素的地址(當然你需要測試空字符串),

s := 'Hello World'; 
aList.Add(@S[1]); 
[...] 
s1 := string(aList[i]); 

,或者使用「PChar類型」,並存儲在那裏所指向的地址,

s := 'Hello World'; 
aList.Add(@s^); 
[...] 
s1 := PChar(aList[i]);