Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];

Вниз

Передача массива в процедуру в кач-ве var параметра.   Найти похожие ветки 

 
id   (2006-10-16 17:33) [0]

Какие способы есть для передачи массива в процедуру?
Подскажите, пожалуйста.

PS. Интересует толкьо в виде var параметра. Т.е.:
procedure Add(var arr: array of string);


 
Пользователь   (2006-10-16 17:36) [1]

procedure Add(var arr: array of string);


 
guav ©   (2006-10-16 17:39) [2]

Для статических и динамических массивов - два способа:
1. Как открытый массив
2. Используя тип массива

Для вариантных массивов - только второй способ - используя тип Variant/OleVariant


 
umbra ©   (2006-10-16 17:39) [3]

2 Пользователь   (16.10.06 17:36) [1]

так лучше не делать

type
 TMyDynArray: array of sometype;
{...................................................}
procedure Add(var arr: TMyDynArray);


 
id ©   (2006-10-16 17:40) [4]

У меня динамический массив.
Можено пример - как передать и как потом обращаться?
например, SetLength сделать для него.


 
Loginov Dmitry ©   (2006-10-16 19:27) [5]

id   (16.10.06 17:33)

Вместо array of string удобнее использовать TStrings (и без всяких var"ов)


 
umbra ©   (2006-10-16 19:27) [6]

type
TMyDynArray: array of sometype;
{...................................................}
procedure Add(var arr: TMyDynArray);
begin
 Setlength(arr, 150);
end;


 
Ketmar ©   (2006-10-16 19:28) [7]

>[5] Loginov Dmitry(c) 16-Oct-2006, 19:27
>Вместо array of string удобнее использовать TStrings
не всегда. %-)


 
Loginov Dmitry ©   (2006-10-16 19:41) [8]

Ketmar ©   (16.10.06 19:28) [7]
не всегда.


Но в 90% случаев так оно и есть.


 
nikola232 ©   (2006-10-16 20:12) [9]


> type
> TMyDynArray: array of sometype;
> {...................................................}
> procedure Add(var arr: TMyDynArray);
> begin
>  Setlength(arr, 150);
> end;

Это зачем? Setlength(arr, 150); надо где-нибудь до процедуры делать.

Потом

> procedure Add(var arr: TMyDynArray);
 var pop,i:integer;
> begin
>  pop:=High(arr);
   for i:=0(1) to pop do
   arr[i]:=Value;
> end;

По моему цели эти преследуются?


 
Kolan ©   (2006-10-16 20:17) [10]


> Это зачем? Setlength(arr, 150); надо где-нибудь до процедуры
> делать.

Даа, а если так:
function DoSmth: TMyDynArray
begin
 SetLEngth(Result, 10);
end;


Тут ты что предложишь?


 
Palladin ©   (2006-10-16 20:23) [11]


> надо где-нибудь до процедуры делать.

это утверждение - личное убеждение или имеет какоето весомое основание?


 
Kolan ©   (2006-10-16 20:35) [12]


> > procedure Add(var arr: TMyDynArray);
>  var pop,i:integer;
> > begin
> >  pop:=High(arr);
>    for i:=0(1) to pop do
>    arr[i]:=Value;
> > end;


Бугога, че еще за поп?


 
Loginov Dmitry ©   (2006-10-16 20:48) [13]

nikola232 ©   (16.10.06 20:12) [9]
pop:=High(arr);


Зачем же все делать через pop?


 
id ©   (2006-10-17 10:11) [14]

Ещё проблема такая, что мне надо написать несколко перегруженных функций, которые будут принимать массивы разных типов.
С этим как быть?


 
Сергей М. ©   (2006-10-17 10:32) [15]


> С этим как быть?


Именно так и быть - написать несколко перегруженных функций, которые будут принимать массивы разных типов.


 
Kolan ©   (2006-10-17 11:31) [16]


> С этим как быть?

overload; + F1


 
nikola232 ©   (2006-10-17 13:21) [17]


> которые будут принимать массивы разных типов.


Тогда пиши
type
TMyDynArray: Variant; //вариантный массив


 
nikola232 ©   (2006-10-17 13:27) [18]


> > надо где-нибудь до процедуры делать.
>
> это утверждение - личное убеждение или имеет какоето весомое
> основание?


Привычка, дело в том что я часто работаю с большими динамическими массивами, и все они описаны как глобальные.


> Зачем же все делать через pop?

а за тем что, если писать так
for i:=0 to High(arr)  do
............
,
то в каждом цикле будет выполняться функция High(arr)


 
Kolan ©   (2006-10-17 13:32) [19]


> то в каждом цикле будет выполняться функция High(arr)

Ты не прав, компилятор не дурак он вычислит однажды.

> все они описаны как глобальные.

Врядли это оправдано.


> Тогда пиши
> type
> TMyDynArray: Variant; //вариантный массив
>


... И причем тут перегрузка.


 
nikola232 ©   (2006-10-17 13:47) [20]


> компилятор не дурак

Ты прав. Привычка, со свойствами на read write может и не прокатить.


> И причем тут перегрузка.


Непричем, я про

> массивы разных типов

имел ввиду.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.042 c
3-1158663019
Mishenka
2006-09-19 14:50
2006.11.26
Как отобразить дерево в DbGridEh?


10-1126443761
Grant
2005-09-11 17:02
2006.11.26
Delphi и PowerPoint


2-1162985489
Lesorub
2006-11-08 14:31
2006.11.26
Помогите, плз, вопрос о типе TStrings


2-1162879742
fmt
2006-11-07 09:09
2006.11.26
Format


15-1162841746
ProgRAMmer Dimonych
2006-11-06 22:35
2006.11.26
Возникла проблема. Поворот треугольника





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский