Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Функция с указателем на массив (чайник)   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.059 c
1-1108995207
red_imp
2005-02-21 17:13
2005.03.06
Как запустить досовую программу с ключами из другой директории


1-1108846915
Shamansky
2005-02-20 00:01
2005.03.06
FastReports?


4-1106224117
Дмитрий Ботвин
2005-01-20 15:28
2005.03.06
Изменение свойств файлов


1-1108826118
DimonS
2005-02-19 18:15
2005.03.06
Подскажите пожалуйста как из реестра


1-1108629913
Slaga
2005-02-17 11:45
2005.03.06
Плагины для дельфи