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

Вниз

класс и динамический массив   Найти похожие ветки 

 
evvcom ©   (2004-04-28 10:43) [40]


> Подскажите, пожалуйста, как передать, чтобы могла?..

см. [37]


 
Alexus12 ©   (2004-04-28 10:48) [41]

то есть достаточно поставить модификатор VAR
перед переменной/ссылкой на входной массив в объявлении?
А что значит, если ничего не ставить
или если ставить const?
догадываюсь, это будет передача не по сыылке, а по значени,?

блин, ну почему в help - proc declaration нет описания ключей???!!!!


 
evvcom ©   (2004-04-28 10:56) [42]


> блин, ну почему в help - proc declaration нет описания ключей???!!!!

Каких ключей?

> то есть достаточно поставить модификатор VAR
> перед переменной/ссылкой на входной массив в объявлении?

Да.

> А что значит, если ничего не ставить
> или если ставить const?

Если ничего не ставить, то в функцию передается значение переменной или указатель, если размер переменной больше 4 байт, но тогда делается копия в стеке, и работа идет уже с копией в стеке. Если употребить const, то копия в стеке не создается, но на все попытки присвоить константе что-либо компилятор начинает ругаться.


 
Alexus12 ©   (2004-04-28 11:29) [43]

В итоге получаем
1. вызывающая процедура:

Type
TIntegerArray = array of Integer;

procedure FindMatch;
var
shablon:TStr;
ArrIndexes:TIntegerArray;
begin

shablon:=form1.Edit1.text;
//вариант 1
ArrIndexes:=MyClassInstance.Find(shablon);
//вариант 2
ResultCount:=MyClassInstance.Find(shablon, ArrIndexes);

end;

2. Метод-обработчик

//вариант 1
Function MyClass.Find(shablon):TIntegerArray;
var
I: Integer;
begin
Result := nil;
for I := 0 to High(fMas) do
begin
if fMas[I] удовлетворил условию, тогда добавим его ИНДЕКС в Result:
Setlength(Result, Length(REsult)+1);
Result[High(Result)] := I;
end;

end;

----------------

//вариант 2
ResultCount:=MyClassInstance.Find(shablon, ArrIndexes):Integer;
var
I: Integer;
begin
Result := nil;
for I := 0 to High(fMas) do
begin
if fMas[I] удовлетворил условию, тогда добавим его ИНДЕКС в ArrIndexes:
Setlength(ArrIndexes, Length(ArrIndexes)+1);
ArrIndexes[High(ArrIndexes)] := I;
Result:=Result+1;
end;

--------
Какой вариант обычно избирают (считают корректным/быстрым/удобным) и почему?
Спасибо!


 
evvcom ©   (2004-04-28 11:35) [44]

В стандартном unit Types уже есть декларация:
type
 TIntegerDynArray = array of Integer;


 
Jack128 ©   (2004-04-28 11:37) [45]


> evvcom ©   (28.04.04 01:03) [27]
 Да,я не удачный пример привел

TSameRec = packed record
 b1, b2, b3: byte;
end;// SizeOf(TSameRec) = 3

TArr = array of TSameRec;
var
 arr: TArr;
// Сейчас (Integer(@arr[1]) - Integer(@arr[0]))= SizeOf(TSameRec) но в будущем это возможно будет не так (каждый элемент массива будет вырывниваться по двойному слову и Integer(@arr[1]) - Integer(@arr[0]) = 4)


 
Alexus12 ©   (2004-04-28 11:46) [46]

>Если ничего не ставить, то в функцию передается значение переменной или указатель

значит, для передачи по ссылке нужен явный var...
а const ускоряет работу не используя копию в стеке...
как странно...


 
evvcom ©   (2004-04-28 12:04) [47]

Что странно?
var и const почти одинаково передают параметр, но при var компилятор разрешает изменять переменную, а при const нет.


 
Alexus12 ©   (2004-04-28 14:01) [48]

Странно = что по умолчанию (без var/const) передается значение,
а не ссылка


 
evvcom ©   (2004-04-28 14:15) [49]


> Странно = что по умолчанию (без var/const) передается значение,
> а не ссылка

Если данные укладываются в 4 байта, то передается значение. Это справедливо и для const. А если > 4 байт, то передается ссылка, но для const и var ничего не копируется, а без них делается копия данных по ссылке в стеке.


 
Alexus12 ©   (2004-04-28 17:22) [50]

Спасибо за разъяснения про var/const!

А по (28.04.04 11:29) [43] ни у кого никаких комментариев?..



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

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.036 c
7-1081239760
[BAD]Angel
2004-04-06 12:22
2004.05.16
Как перехватить нажатие двух клавишь?


14-1082814600
Piter
2004-04-24 17:50
2004.05.16
Ничего не понимаю


3-1082537942
Vopros
2004-04-21 12:59
2004.05.16
Encrypted dBASE tables как открыть?


3-1082101716
velial
2004-04-16 11:48
2004.05.16
String SQL Parser


1-1083661112
Alkmas
2004-05-04 12:58
2004.05.16
Создание Меню из DLL





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