| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Передача массива в качества параметра |
| Автор: Delphist 22.10.2008, 23:07 |
| Возник вопрос, что будет происходить (будет ли копироваться, а следовательно тратиться память и процес. время) при передаче массива в качестве параметра ф-ции: Type Ta=array of something; Var a:Ta; Procedure Proc(a:Ta); - внутри процедуры создаётся копия массива, внутри процедуры работа осуществляется только с копией данных Procedure Proc(var a:Ta); - внутри процедуры код работает именно с переменной а и её содержимым, не понятно будется ли производиться копирования массива или вся работа происходит через указатель на массив? Procedure Proc(const a:Ta); - внутри процедуры запрещено изменять данные переменной а не понятно будется ли производиться копирования массива или вся работа происходит через указатель на массив? Procedure Proc(out a:Ta); - при входе в процедуру массив рассматривается как пустой, но после выполнения процедуры можно получить значения |
| Автор: Felan 23.10.2008, 06:42 |
| 1 Да. 2 Копирования не будет. 3 Constant Parameters A constant (const) parameter is like a local constant or read-only variable. Constant parameters are similar to value parameters, except that you can't assign a value to a constant parameter within the body of a procedure or function, nor can you pass one as a var parameter to another routine. (But when you pass an object reference as a constant parameter, you can still modify the object's properties.) 4 Out Parameters An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn't provide any input. Собственно в таких случаях хелп таки рулит |
| Автор: Delphist 23.10.2008, 09:56 |
Как я выснил и для этого случая Procedure Proc(a:Ta); копирования массива происходить не будет. Динамический массив всегда передается по указателю Добавлено через 2 минуты и 45 секунд А как будут звучать ответ на мой вопрос, если мы работаем со статичным массивом? |
| Автор: Coder 23.10.2008, 10:35 |
| Delphist, статический в первом случае будет копироваться. Почему бы не проверить? ;) |
| Автор: Delphist 27.10.2008, 10:26 |
| Coder, спасибо |