![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция с указателем на массив (чайник) [D6, Win2k]
Pavelkq © (2005-02-21 10:26:00)Здравствуйте! Впервые решил не перебрасывать в функцию весь массив, как делал раньше, а передать ей только указатель на первый элемент и вернуть такой же указатель. В теории понимаю, как это работает, но каков синтаксис, не знаю:-( Помогите пожалуйста!
Имею динамический массив
var Indexses: array of MyType;
Надо сделать функцию сортировки (это естественно сам сделаю) и вызов типа:
Indexes:=SortInd(Indexes)
но через указатели!
Anatoly Podgoretsky (2005-02-23 13:26:00) [1]Pavelkq (21.02.05 12:30) [5]
function SortInd(const Indexses: TIndexses): TIndexses;
Юрий Зотов (2005-02-23 13:15:00) [2]> begin...end © (21.02.05 14:08) [21]
В одну сторону - да. В другую - надо.
begin...end (2005-02-21 14:08:00) [3]> Юрий Зотов © (21.02.05 14:00) [20]
>> В TStrings хранятся TObject, в TList -- Pointer.
> Это одно и то же. Надо просто привести тип.
Его даже не надо приводить явно. Вероятно, он приводится автоматически.
Юрий Зотов (2005-02-21 14:00:00) [4]> Чапаев
Ох, неправы Вы, Василий Иванович.
> если type MyType=Byte, то придётся что-то придумывать, чтобы
> байт представить в виде указателя
Не придется. Один байт и так отлично укладывается в 4-байтовую область. Надо просто привести тип.
> В TStrings хранятся TObject, в TList -- Pointer.
Это одно и то же. Надо просто привести тип.
Чапаев (2005-02-21 13:59:00) [5]> Хотя я бы для данной задачи оставил бы всё в массиве и не плодил "сущностей без необходимости".
Согласен. ;-)
begin...end (2005-02-21 13:48:00) [6]> Чапаев © (21.02.05 13:43) [17]
> Так к чему там было о "динамическом выделении памяти"?
Ну я имел в виду, что почему бы под элементы не выделять память динамически, получая указатель на каждый элемент, а затем заносить указатели в экземпляр TList?
Хотя я бы для данной задачи оставил бы всё в массиве и не плодил "сущностей без необходимости".
Чапаев (2005-02-21 13:43:00) [7]> Автор ветки ничего не говорил о том, что такое TMyType.
Потому и растекаюсь мыслию по древу.
> Ась?
Так к чему там было о "динамическом выделении памяти"?
begin...end (2005-02-21 13:34:00) [8]> Чапаев © (21.02.05 13:31) [15]
> В TString хранятся TObject, в TList -- Pointer.
> обычно удобнее таки с TObject работать.
Автор ветки ничего не говорил о том, что такое TMyType.
> Га?
Ась?
Чапаев (2005-02-21 13:31:00) [9]> Так а почему TStrings лучше, чем TList?
В TString хранятся TObject, в TList -- Pointer. Конечно, однозначно говорить "удобнее" нельзя, но обычно удобнее таки с TObject работать.
> А как же динамическое выделение памяти?
Га?
begin...end (2005-02-21 13:27:00) [10]> Чапаев © (21.02.05 13:23) [13]
> Если MyType -- объектный тип, то TList/TStrings
> подходит очень хорошо.
Так а почему TStrings лучше, чем TList?
> А вот если type MyType=Byte, то придётся что-то
> придумывать, чтобы байт представить в виде указателя
> (скорее всего, будет что-то вроде type MyType=class
> MyField:Byte end;).
А как же динамическое выделение памяти?
Чапаев (2005-02-21 13:23:00) [11]> var Indexses: array of MyType;
Если MyType -- объектный тип, то TList/TStrings подходит очень хорошо. А вот еслиtype MyType=Byte, то придётся что-то придумывать, чтобы байт представить в виде указателя (скорее всего, будет что-то вродеtype MyType=class MyField:Byte end;).
begin...end (2005-02-21 13:09:00) [12]> Pavelkq (21.02.05 12:57) [7]
> то данные будут отсортированы в памяти
Будут. Если Вы их отсортируете.
> указатель массива останется на первом элементе?
Непонятный вопрос.
> Кстати, Джулиан Бакнелл рекомендует использовать
> экземпляр TList.
Рекомендует для чего?
Инструктор (2005-02-21 13:02:00) [13]> [8] Чапаев © (21.02.05 13:00)
А... можно подробнее про Tstrings и TList? В чем воробьи?
Чапаев (2005-02-21 13:02:00) [14]> Имею в виду все корректро будет?
От тебя зависит. ;-)
> Кстати, Джулиан Бакнелл рекомендует использовать экземпляр TList. Не бует проблем?
Ну... Проблем-то не будет. Но TList оперирует с указателями. Нередко это -- стрельба из пушки по воробьям. Обычно практичнее оперировать с наследниками TStrings.
Чапаев (2005-02-21 13:01:00) [15]> Имею в виду все корректро будет?
От тебя зависит. ;-)
> Кстати, Джулиан Бакнелл рекомендует использовать экземпляр TList. Не бует проблем?
Ну... Проблем-то не будет. Но TList оперирует с указателями. Нередко это -- стрельба из пушки по воробьям. Обычно практичнее оперировать с наследниками TStrings.
Чапаев (2005-02-21 13:00:00) [16]> Имею в виду все корректро будет?
От тебя зависит. ;-)
> Кстати, Джулиан Бакнелл рекомендует использовать экземпляр TList. Не бует проблем?
Ну... Проблем-то не будет. Но TList оперирует с указателями. Нередко это -- стрельба из пушки по воробьям. Обычно практичнее оперировать с наследниками TStrings.
Pavelkq (2005-02-21 12:57:00) [17]А если это процедура, как вы указали, то данные будут отсортированы в памяти и указатель массива останется на первом элементе? Имею в виду все корректро будет?
Кстати, Джулиан Бакнелл рекомендует использовать экземпляр TList. Не бует проблем?
Чапаев (2005-02-21 12:38:00) [18]> Только мне нужна функция, которая вернет тоже массив.
Зачем именно функция? В принципе, можно и функцией, но вот если, к примеру, ты потом эту функцию запихаешь в dll и будешь импортировать в основную программу, будут проблемы...
Pavelkq (2005-02-21 12:30:00) [19]Вот это уже интереснее. Только мне нужна функция, которая вернет тоже массив.
Чапаев (2005-02-21 12:24:00) [20]> Indexes:=SortInd(Indexes)
А вот так делать крайне нежелательно... Лучше уж procedure SortInd(const InArr:TArray; var OutArray:TArray).