#delphi #pascal #указатели #память #freepascal
ToDel := root^.right; ToDel := ToDel^.right; После этих 2 строчек кода root^.right не изменяется. root^.right := root^.right^.right; А после этой изменяется , как сделать что бы в первом случае также изменялось ? TNode = ^Node; Node = record key :TKey; data :TData; left, right,parent:TNode; end; root : TNode; ToDel: TNode;
Ответы
Ответ 1
Все логично. ToDel := root^.right; копирует указатель из right в ToDel. Указатель в root и не должен поменяться. Если вам нужно поменять root, делайте так: ToDel := root^.right; root^.right := ToDel^.right; // здесь нужно освободить память, на которую указывает ToDel, если она вам больше нужна. P.S. Типы для структур лучше называть с буквой T в начале (от слова Type), а типы для указателей называть с буквой P в начале (от слова Pointer). тогда будет проще и вам и другим разбираться в вашем коде. PNode = ^TNode; TNode = record key: TKey; data: TData; left: PNode; right: PNode; parent: PNode; end;Ответ 2
root^.right указывает на область памяти, в которой находится структура Node. После ToDel := root^.right; ToDel тоже указывает на эту же область памяти. В этот момент root^.right и ToDel - два независимых указателя, которые указывают на одно и то же. От того, что Вы измените ToDel, никакой другой указатель не изменится. Bonus question: После назначения root^.right := root^.right^.right; сохраняется ли где-нибудь старый адрес root^.right, и очищается ли память распределенная для этой структуры?
Комментариев нет:
Отправить комментарий