Главная страница
    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.06 c
15-1162671077
Ученик чародея
2006-11-04 23:11
2006.11.26
Вах... И они развивают нашу украинскую науку...


2-1162873515
Gex88
2006-11-07 07:25
2006.11.26
Два слова в одном тексте


2-1162938878
Ref
2006-11-08 01:34
2006.11.26
Запрос в ADOQuery


3-1159301119
Olaf
2006-09-27 00:05
2006.11.26
Помогите составить SQL запрос и сведение его результатов.


15-1162563349
s_______s
2006-11-03 17:15
2006.11.26
Delphi7se +Delphi10Lite





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский