Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[35.173.48.18] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Цитата leo @ Нет, в обоих случаях массив передается непосредственно по указателю, и разница лишь в том, что при Arr:TStringArray ничего доп-но не передается и High(Arr) определяется внутри функции по теневому заголовку Arr (вызовом _DinArrayHigh), а в случае с open array _DinArrayHigh(Arr) вызывается до вызова функции и передается в нее в виде доп.теневого параметра, а внутри функции High(Arr) просто берет это значение из параметра (в данном случае из регистра EDX) О! А я всё кумекал, в чем разница и почему нельзя просто сделать одну функцию для обоих случаев. Спасибо! |
Сообщ.
#17
,
|
|
|
Цитата Fr0sT @ О! А я всё кумекал, в чем разница и почему нельзя просто сделать одну функцию для обоих случаев В качестве open array параметра, можно передавать не только [...] - конструктор массива "на лету", но и любой массив, совместимый по типу элементов (динамический, статический или выделенный в куче по GetMem), а также одну переменную типа элемента массива (которая рассматривается как массив длины 1). Причем для статических и выделенных по GetMem массивов, во-первых, не обязательна индексация от 0 (хотя внутри функции open array по любому индексируется с 0), во-вторых, можно передавать не весь массив, а произвольное число первых элементов с помощью псевдофункции Slice(массив,Count), которая на этапе компиляции просто заменяет значение передаваемого теневого параметра High(Arr) на Count. Ну и разумеется, во всех этих случаях при объявлении параметра-массива как const в функцию просто передается указатель на исходный массив и значение High=Count-1 |
Сообщ.
#18
,
|
|
|
Fr0sT в итоге что, в первом посте у тебя финальная версия кода?
Если нет - то приведи в порядок, перед НГ будем причесывать раздел и переносить все в FAQ, поэтому желательно чтобы все было готово. |
Сообщ.
#19
,
|
|
|
Rouse_, готово.
|