Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2010, 21:42   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Несколько параметров в SetLength

Вот код, который я нашел в System:
Код:
procedure       _SetLength(s: PShortString; newLength: Byte);
begin
  Byte(s^[0]) := newLength;   // should also fill new space
end;
Что тогда происходит при таком запросе:
Код:
Var
 R : Array of Array of Single;

Begin
 SetLength(R, $F, $F);
Что-то я не врубаюсь, что происходит при задании длина сразу для нескольких параметров.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 20.03.2010, 22:45   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Несколько параметров - это для многомерных массивов.
Цитата:
For dynamic arrays, SetLength may take more than one length parameter (up to the number of array dimensions). Each parameter specifies the number of elements along a particular dimension.
Скандербег вне форума Ответить с цитированием
Старый 21.03.2010, 11:32   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ну это и ежу понятно. мне интересно другое. Выше я предоставил код функи. КУДА отправляется второй параметр? Там же для него места нет.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.03.2010, 12:55   #4
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию

А вас не смущает то, что приведённые вами функции имеют разные названия?
Цитата:
{ Predefined constants, types, procedures,}
{ and functions (such as True, Integer, or }
{ Writeln) do not have actual declarations.}
{ Instead they are built into the compiler }
{ and are treated as if they were declared }
{ at the beginning of the System unit. }
NikLik вне форума Ответить с цитированием
Старый 21.03.2010, 13:13   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Кроме этой _set... другой set... я в system не нашел.

Все равно. как может процедура принимать больше параметров, чем в ней указано? Если бы были несколько одинаковых функций (overload), то
1) Они бы высвечивались при наборе параметров.
2) Их бы пришлось писать около десятка тысяч - ведь я могу нарисовать и десятимерный массив и стомерный.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.03.2010, 13:19   #6
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Приведенный вами код не компилируется, если параметров больше чем положено. SetLength встроена в компилятор, вы не найдете её объявления, и delphi перед компиляцией смотрит, соответствует ли кол-во параметров размерности массива.
Изобретатель велосипедов

Последний раз редактировалось Selestis; 21.03.2010 в 13:27.
Selestis вне форума Ответить с цитированием
Старый 21.03.2010, 13:28   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Т.е. это не просто процедура, а самогенерирующаяся? И создать что-то подобное не получится?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.03.2010, 13:44   #8
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Вроде того, насколько я знаю. А вы хотите создать свою SetLength?
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 21.03.2010, 13:52   #9
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Я хотел рассмотреть возможность использовать разное количество параметров для одной процедуры. Мало ли, где это может пригодиться.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.03.2010, 14:00   #10
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Оно там есть. Посмотри процедуру _DynArraySetLength. SetLength является "заголовком" для неё. Размерность массива устанавливает _DynArraySetLength в числе параметров у которого есть упакованный тип tdynarraytypeinfo отвечающий за тип, размер элемента в массиве и указатель на следующую структуру в случае многомерных массивов.
Но как указано в документации "Она никогда не должна быть необходимой для вызова этой функции непосредственно, а стандартные SetLength функция должна использоваться вместо." (перевод с англ.)
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SetLength никогда не стирает старые элементы массива? TwiX Общие вопросы Delphi 6 20.03.2010 02:35
Вкаких случаях может быть полезной процедура SetLength Ainur Помощь студентам 2 22.05.2009 12:01
Строка параметров Rus+ick Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.12.2008 05:46
Передача параметров aesoem Общие вопросы Delphi 8 15.07.2008 21:51
считает что ReOpArr это обычный массив и не может применить к нему процедуру SetLength. Dunpeal Общие вопросы Delphi 2 24.12.2007 08:07