2013-08-04 133 views
1

如何在Delphi中寫入此代碼(C++:指針指針)?Delphi中指針的指針

int var; 
    int *ptr; 
    int **pptr; 

    var = 3000; 
    ptr = &var; 
    pptr = &ptr; 

    cout << "Value of var :" << var << endl; 
    cout << "Value available at *ptr :" << *ptr << endl; 
    cout << "Value available at **pptr :" << **pptr << endl; 
+1

我不說話了很多帕斯卡的,但閱讀[第一款谷歌命中]後( http://delphi.about.com/od/objectpascalide/a/pointers.htm),我非常自信如何翻譯這個。你試過什麼了? – 2013-08-04 15:50:08

回答

8

你可以這樣做低於這個

var 
    i: Integer; 
    pi: PInteger;  // or ^Integer 
    ppi: ^PInteger;  // or PPInteger, if you first define `type PPInteger = ^PInteger` 
begin 

    i := 3000; 
    pi := @i; 
    ppi := @pi; 

    Writeln('Value of i: ', i); 
    Writeln('Value of i: ', pi^); 
    Writeln('Value of i: ', ppi^^); 
+0

(我現在不在家,在我的筆記本電腦上,我只有FPC/Lazarus,我想測試上面的代碼,但拉撒路拒絕編譯任何東西(即使它是全新的安裝)... ) –

+0

@David:你確定'^ Integer'編譯? (如果沒有,你必須使用'^ PInteger'。) –

+0

@David:我越想越多,我相信你實際上寫不出'^^Sth' ......但請糾正我(如果你有一個可用的編譯器來玩!)。 –

-2

代碼工作正常:

program Project1; 

{$APPTYPE CONSOLE} 

type 
    PIntPtr = ^Integer; 
    PInt2Ptr = ^TIntPtr; 

var 
    pi1: PIntPtr; 
    pi2: PInt2Ptr; 

begin 
    New(pi1); 
    try 
    New(pi2); 
    try 
     pi1^ := 1000; 
     pi2^ := i1; 
     WriteLn(pi2^^); 
     Readln; 
    finally 
     Dispose(pi2); 
    end; 
    finally 
    Dispose(pi1); 
    end; 
end. 
+1

約定名稱爲PInteger和PPInteger –

+0

'i2 ^:= @ i1;'看起來很可疑。您將指針指向整數指向指向整數的指針。另外,如果'New(i1)'成功,'New(i2)'失敗,則不會調用Dispose(i1)'。鑑於異常處理不是問題的一部分,也許最好是以避免需要的方式重寫你的答案。 – hvd

+1

-1:測試顯示它確實會因此輸出垃圾。 – hvd