Указатели взрывают мозг

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Указатели взрывают мозг

Сообщение Climber »

Начал активно изучать RTTI, читаю книгу Пачеко "Delphi 6".
Например, там приводится такой код:

Код: Выделить всё

var
  PropList: PPropList;
  s2: string;
...
s2:=PropList[i]^.PropType^.Name;
FPC с таким кодом работать отказывается - ругается на последнюю строку. Поиски методом научного тыка дали такой результат:

Код: Выделить всё

s2:=PropList^[i]^.PropType^.Name;
Такая строка не только компилируется, но и дает ожидаемый от нее результат.
Почему так? А главное, почему от Delphi отличается?
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

А режим совместимости с Delphi - включен?
Аватара пользователя
Astralis
новенький
Сообщения: 45
Зарегистрирован: 06.06.2007 20:33:05
Откуда: Tvercity-Annet
Контактная информация:

Сообщение Astralis »

Последний вариант и в Delphi работает и в borland pascal и в целом он более предпочтителен.
delphi language имеет некоторые послабления в работе с указателями, но не стоит ими злоупотреблять.
хотя использовать Edit1^.Text вместо Edit1.Text тоже наверное перебор
не удивлюсь если в delphi сработает

Код: Выделить всё

s2:=PropList[i].PropType.Name;
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Astralis писал(а):не удивлюсь если в delphi сработает
s2:=PropList[i].PropType.Name;

Обязательно сработает... :) Поэтому учить указатели по Дельфи - это взрыв мозга на макаронной фабрике. Люди постоянно путаются в статических и динамических переменных. :)
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Сообщение and »

Да-да-да! Я тоже карет в Delphi опускал везде, где только можно (на байтах экономил ;-) ), пока не понадобилось поработать с указателем на функцию (т.е. на процедурную переменную), возвращающую указатель :-) Легко запутаться в трёх соснах: где собственно указатель, а где то, на что он указывает.
Ответить