Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > ^. или .


Автор: Vovkin 28.5.2007, 01:07
Есть код
Код

type
  ProgInfo = record
    Dir : TStringList;
    Files : TList;
  end;
  
  pProgInfo = ^ProgInfo;

В программе
Код

var
  p : pProgInfo;
begin
  New(p);
  p^.Dir := TStringList.Create; // Это правильно 
  p.Dir := TStringList.Create; // или это правильно?
  // Что-то делаем 
end

В обоих случаях всё компилится и работает. Так как правильно писать?

Автор: Shaggy 28.5.2007, 01:35
как нравится...
оба варианта верны

Автор: aktuba 28.5.2007, 01:57
правильный - первый вариант...

Автор: m0ro 28.5.2007, 03:16
Согласен. Правильный первый.

Автор: Yanis 28.5.2007, 06:34
Оба варианта работают и работают одинаково.
А верный этот: 
Цитата(Vovkin @  28.5.2007,  02:07 Найти цитируемый пост)
p^.Dir := TStringList.Create; // Это правильно 


Автор: MetalFan 28.5.2007, 09:12
Цитата(Vovkin @  28.5.2007,  01:07 Найти цитируемый пост)
p.Dir := TStringList.Create; // или это правильно?

и это правильно... с какой-то там версии делфей среда позволяет обращаться к типизированным указателям таким образом. т.е. без указания ^. AFAIK
другое дело, что это не считается хорошим тоном....

Автор: drkot 28.5.2007, 10:08
Цитата(MetalFan @  28.5.2007,  09:12 Найти цитируемый пост)
т.е. без указания ^.

ровно, до момента, когда значение указателя есть указатель smile А дальше среда не знает что именно ты имееш в виду (адрес указателя или его данные)

Автор: Alexeis 28.5.2007, 12:06
  Верны оба варианта, просто это называется неявным разыменованием. Почем-то когда это касается объектов всем все нравиться, а когда речь заходит о рекордах все дружно называют плохим тоном. 
  Начиная с delphi 2006 границы между записью и объектом начинают стираться, потому считаю что все эти ^. нужны только когда есть узкий момент и нужно явно дать понять компилятору, что имеешь ввиду, а в остальных случаях это только загромождает код и делает его непоследовательным. Либо используем неявное разыменование либо нет, иначе путаница. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)