Работа со "Списком"

Добрый день.Хотелось бы разобраться с одним вопросом. Сам допереть не могу. :-( А наступить в дальнейшем на грабли не хочется.Есть классический список:
TPList = ^TList;

TList = record
 date : String;
 next : TPList;
end;
Не могу понять разницу в коде:
Var
 start : TPList;

begin
 new (start);
 start.date := 'abd';
 Showmessage(start.date);
 ShowMessage(start^.date);
end;
Выводит одно и то же? Делфи насколько умный, что разницы нет? Пробовал своими силами понять, но разницы не вижу. Кто подскажет?Спасибо.
4 ответа

Дельфи умеет определять ситуацию, когда у указателя на запись хотят взять данные, как у записи, и сама разыменовывает (в получающемся машинном коде). Как писать - решать исключительно Вам, но обычно люди указывают ^ чтобы не путаться самим.


Выводит одно и то же? Делфи насколько умный, что разницы нет?
Раньше была разница, т.к. без ^ компилятор пытался получить данные самого адреса указателя, сейчас компилятор поумнел и сам определяет, как обращаться к указателю.


Делфи насколько умный, что разницы нет?
Да, это одна из тех штук, что входят в "Extended syntax" в настройках компилятора или {$X+} директивой. Помимо умного разыменования указателей включает в себя также адресную арифметику для PChar и PWideChar.Расширенный синтаксис впервые появился в Turbo Pascal 6.0 и нужен был для Turbo Vision.


Спасибо огромное. Теперь чётко понимаю что делаю. Вопрос снят. :-)