Показать сообщение отдельно
  #5  
Старый 02.04.2010, 23:25
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от Lotles
Подскажите, почему во втором случае не нужно выделять память ?
Ты знаешь разницу между переменной и ссылкой на переменную?
попробую прокомментировать твой код, может уловишь смысл.
Код:
var
  p:^integer; //ссылка на переменную типа integer
  a:integer;   //перенная типа integer
  str:^String;//ссылка на переменную типа стринг
//сама ссылка это по сути переменная типа integer - она равняется 4-м 
//байтам
begin
  New(str); //выделяем память под переменную типа string
  //при том переменная str это ссылка а не стринг, она лишь указывает
  //на область памяти где лежит переменная типа стринг 
  Str^:=Edit1.Text;   //записываем в переменную по ссылке
  a:=StrToInt(Edit1.Text);  //просто записываем в переменную
  p:=@a; //привязываем ссылку на переменную а типа integer
  p^:=p^*2; //умножаем переменную по ссылке
  ShowMessage(IntToStr(p^));  //ну и соответственно выводим.
end
объявленние со знаком типа ^, показывает что это только сылка, изначально равна четырем байтам, и неизвестно на что указывает,
а операция New() выделяет область памяти и привязывает к ней ссылку,
есть еще Dispose(), соответственно освобождает, всегда надо уничтожать переменные, созданные методом New(), даже выходя из процедуры, сами они не освобождаются.
Надеюсь помог)
Ответить с цитированием