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