![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Подскажите, почему во втором случае не нужно выделять память ?
Код:
procedure TForm1.Button1Click(Sender: TObject); var p:^integer; a:integer; str:^String; begin New(str); Str^:=Edit1.Text; //Здесь нужно выделение памяти a:=StrToInt(Edit1.Text); //Здесь не нужно выделять память p:=@a; p^:=p^*2; ShowMessage(IntToStr(p^)); Skype: Lotles-XXXX ![]() Последний раз редактировалось Lotles, 02.04.2010 в 20:02. |
#2
|
||||
|
||||
![]() Некомильться, за минус не обессудте.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
![]() Ну вы-же сами указываете компилятору при описании типов, что размер строки заранее неизвестен:
Код:
str:^String; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
||||
|
||||
![]() Страдалецъ,готов поспорить. Под строки, если динамика лучше PChar или PAnsiChar.
Но все ж понимают, что это моё умозрительное имхо Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
|||
|
|||
![]() Цитата:
попробую прокомментировать твой код, может уловишь смысл. Код:
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(), даже выходя из процедуры, сами они не освобождаются. Надеюсь помог) Последний раз редактировалось Asinkrit, 04.04.2010 в 02:43. |
#6
|
||||
|
||||
![]() Господа!!!!
Работа с памятью - очень интересная штука. Я готов ответить на ваши вопросы. Давайте организуем конфренцию по скайпу. Кто хочет услышать/участвовать - пишите. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#7
|
|||
|
|||
![]() Вопросов по работе с памятью у меня нету, но конференция вещь очень интересная, и я бы с удовольствием принял участие, авось узнал бы чего нового)
|
#8
|
||||
|
||||
![]() я бы тоже поучаствовал(послушал бы) в конференции
![]() |