2013-12-20 4 views
0

Как я могу написать эквивалент этому в pascal?Изменение двумерного указателя в pascal

void push(struct node **head, struct node **member) 
{ 
    (*head)->next = *member; 
    (*member)->prev = *head; 
    (*member)->next = NULL; 
    *head = *member; 
} 

Я пытался что-то вроде этого:

procedure Push(head : nodeptr; prev : nodeptr; sym : nodeptr); 
begin 
    prev^.prev := sym; 
    sym^.prev := prev; 
    sym^.next := nil; 
    prev := sym; 
end; 

На самом деле, я хочу знать, как сделать эквивалент этому в паскале: *head = *member;, где оба являются struct node** типа, 2D-указатель.

EDIT: Я добавил свой компилятор pascal. Это может быть актуально.

ответ

2

Из этого урока на паскаль pointer to pointer, вы могли бы сделать что-то вроде этого

program exPointertoPointers; 
type 
    iptr = ^integer; 
    pointerptr =^iptr; 
var 
    num: integer; 
    ptr: iptr; 
    pptr: pointerptr; 
    x, y : ^word; 
begin 
    num := 3000; 
    (* take the address of var *) 
    ptr := @num; 
    (* take the address of ptr using address of operator @ *) 
    pptr := @ptr; 
    (* let us see the value and the adresses *) 
    x:= addr(ptr); 
    y := addr(pptr); 
    writeln('Value of num = ', num); 
    writeln('Value available at ptr^ = ', ptr^); 
    writeln('Value available at pptr^^ = ', pptr^^); 
    writeln('Address at ptr = ', x^); 
    writeln('Address at pptr = ', y^); 
end. 
+0

Как назначить 'x' указателя на тип записи указателю-указателю' y' на тип recored? Я попробовал 'x^.m: = y ^;' в C это 'x-> m = * y', где он объявлен как' struct node * x, ** y; ' –

+0

Я думаю, что вы ищете' x^.m: = @y; ' –

+0

Я забыл упомянуть, что я тоже пробовал это. Я получил «nodeptr» ожидаемый «узел» –

1

Я думаю, что вы можете сделать указатель на указатель следующим образом:

type 
    ptr = ^integer; 
    ptr_ptr =^ptr; 

А потом почтительное это как так :

ptr_ptr ^^ 

Поэтому *head = *member; должен, вероятно, l ook подобный head^^ := member^^.

+0

Большое спасибо тоже –