Цитата:
Сообщение от 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(), даже выходя из процедуры, сами они не освобождаются.
Надеюсь помог)