2013-08-04 4 views
1

이 코드를 작성하는 방법 (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), 나는 이것을 어떻게 번역 할 것인지 꽤 확신합니다. 지금까지 뭐 해봤 어? –

답변

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 만 얻었습니다. 위의 코드를 테스트하고 싶지만, 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

관련 문제