2013-08-04 139 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