![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Указатели
unknowing © (2007-12-08 21:19:00)type
PMyRec = ^TMyRec;
TMyRec = record
B: Byte;
I: Integer;
end;
implementation
{$R *.dfm}
function GetRes : TMyRec;
begin
Result.B:= Ord('A');
Result.I:=0;
end;
function GetResP : PMyRec;
begin
GetMem(Result,Sizeof(TMyRec));
Result^.B:= Ord('B');
Result^.I:=1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetRes;
GetResP;
end;
Здравствуйте, уважаемые мастера! Мой вопрос: в каких случаях используют подобные указатели (в моем примере PMyRec)?
unknowing (2007-12-08 22:29:00) [21]
> Anatoly Podgoretsky © (08.12.07 22:24) [18]
Просто пытаюсь делать на Delphi. Все работает, но у программистов-профессионалов есть, вроде, понятие "хороший стиль". Поэтому интересно, так организовывается обмен, а Delphi просто инструмент...
Anatoly Podgoretsky (2007-12-08 22:24:00) [22]> unknowing (08.12.2007 22:15:17) [17]
Ничего не понятно, как это связано с Дельфи?
unknowing (2007-12-08 22:15:00) [23]
> Anatoly Podgoretsky © (08.12.07 22:11) [16]
Про глобальные переменные... (оффтоп) Делаю так: считываю данные с сом-порта, типа, GetBuff, все что пришло передаю в парсер ParseBuf(GetBuff.data), если сообщение закончено, то заполняю глобальную переменную-запись и в цикле 10 Гц выдаю ее значения на экран... Так делают профи или нет ? :)
Anatoly Podgoretsky (2007-12-08 22:11:00) [24]> unknowing (08.12.2007 22:09:15) [15]
Ты имеешь в виду наверно ручное выделение памяти, в наше время необходимости не вижу, есть альтернативные методы. Будет необходимость в N направленых списках вот тогда может появиться необходимость.
unknowing (2007-12-08 22:09:00) [25]
> Anatoly Podgoretsky © (08.12.07 22:04) [14]
Если Вас не затруднит, приведите пример с необходимостю динамического выделения памяти.
Anatoly Podgoretsky (2007-12-08 22:04:00) [26]Задачи разные бывают. Если задаче требуется динамическое выделение памяти, то так тому и быть. Но если это не требуется, а программист сует не нужное, то это плохо.
Приведеные два варианта не конечные.
Пока реальных вопросов не видать.
А использовать можно, что угодно и как угодно.
За последнии несколько лет мне не потребовалось динамически выделять память под переменные (типы), хватает или глобальных или локальных простых переменных или динамических массивов, а также классов. Нужды строить списки нет.
{RASkov} (2007-12-08 22:03:00) [27]> [6] unknowing (08.12.07 21:54)
> Какие преимущества?
Скорость.
Но опять же смотря в каких случаях в приведенном тобой нет преимущества...
> [10] unknowing (08.12.07 21:59)
Вот в данном случае без указателя никак:
TRec = record
param: Integer;
Next: PRec;
end;
PRec = ^TRec;
unknowing (2007-12-08 22:03:00) [28]
> antonn © (08.12.07 22:02) [11]
Если Вас не затруднит, приведите пример.
antonn (2007-12-08 22:02:00) [29]в списках, где укзатели указывают на большие куски памяти :)
не собирать же их все в один массив :)
unknowing (2007-12-08 21:59:00) [30]
> Anatoly Podgoretsky © (08.12.07 21:58) [9]
Конкретизирую вопрос. В каких видах задач лучше/практичней/продуктивней/пр. используют указатель?
Anatoly Podgoretsky (2007-12-08 21:58:00) [31]> unknowing (08.12.2007 21:56:08) [8]
Непонятно, что эти переменные здесь делают, они никак не используются.
Применение того или другого вида определяется задачей.
unknowing (2007-12-08 21:56:00) [32]
> Anatoly Podgoretsky © (08.12.07 21:52) [5]
begin
MyB:=GetRes.B;
MyBp:=GetResP^.B;
end;
Anatoly Podgoretsky (2007-12-08 21:56:00) [33]> unknowing (08.12.2007 21:54:06) [6]
Ближе к конкретике, а то говорить про погоду на Марсе как то неинтересно.
unknowing (2007-12-08 21:54:00) [34]
> Джо © (08.12.07 21:36) [2]
А к чему динамическое управление памятью? Какие преимущества?
Anatoly Podgoretsky (2007-12-08 21:52:00) [35]Так твой код тоже абсолютно не понять, с одной стороны функции, а с другой плюем на них.
unknowing (2007-12-08 21:47:00) [36]
> Если утрированно, то указатели остались в основном для совместимости,
> и нет надобности в их использовании, только в специфичиских
> случаях, например, в своеобразных списках, но и в них уже
> сейчас мало нужды...
Ура!!! Я не понимал зачем все это.. если можно просто Trec и без явной работы с памятью!
{RASkov} (2007-12-08 21:43:00) [37]Вопрос не странный.... вопрос вполне нормальный а вот ответить коротко на него трудно....
В приведенном коде я не вижу смысла в GetResP, отсюда следует, что тип PMyRec = ^TMyRec; (типизированный указатель) - не к чему...
Не так давно здесь на форуме этот вопрос(или похожий) был уже, и на него был отличный ответ подкрепленный кодом... Вот только ответившего не помню :( Помоему Ю. Зотов.... Мне тот ответ очень понравился....
Если утрированно, то указатели остались в основном для совместимости, и нет надобности в их использовании, только в специфичиских случаях, например, в своеобразных списках, но и в них уже сейчас мало нужды...
С другой стороны - нетипизированные указатели довольно широко используються, например в АПИ
Джо (2007-12-08 21:36:00) [38]> Мой вопрос: в каких случаях используют подобные указатели
> (в моем примере PMyRec)?
Ну, вот в вашем же примере и видно, зачем.
Для динамического управления памятью. Почему же не просто указатель, а типизированный? А потому, что удобно и практЫчно.
Какой вопрос, такой и ответ, не обессудьте :)
homm (2007-12-08 21:30:00) [39]> [0] unknowing (08.12.07 21:19)
> подобные указатели
Чем подобные указатели отличаются от неподобных? А вообще, вопрос очень странный, такое чувство, что на самом деле не это хотел спросить.