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

Вниз

В чём разница между Var и Pointer   Найти похожие ветки 

 
Nemaster   (2003-10-06 15:17) [0]

Подскажите, пожайлуйста, сабж (в смысле передачи параметров в подпрограммы). Что лучше использовать при передаче массивов.

С уважением!


 
Digitman ©   (2003-10-06 15:20) [1]


> Что лучше использовать при передаче массивов.


зависит от декларации массива и контекста его использования в вызывающем/вызываемом коде


 
han_malign ©   (2003-10-06 15:48) [2]

>Что лучше использовать при передаче массивов.
- все приемы хороши, выбирай на вкус...

procedure FFF(aArray: array of TMyType);
var i: integer;
begin
for i:=Low(aArray) to High(aArray) do ...aArray[i]...
end;

procedure FFF(var aData; aDataCount: integer);
var i: integer;
_data: array[0..0] of TMyType;
begin
for i:=0 to aDataCount-1 do ..._data[i]...
end;

procedure FFF(aData: PMyType; aDataCount: integer);
var i: integer;
begin
for i:=0 to aDataCount-1 do begin
...aData^...
inc(aData)
end;
end;

procedure FFF(aData: PMyType);
const TERMINAL_NULL=...;
begin
while(aData<>TERMINAL_NULL)do
...aData^...
inc(aData)
end;
end;


 
clickmaker ©   (2003-10-06 15:55) [3]

Var и Pointer - синонимы. Просто в случае с Var ты избавлен от необходимости кастить указатель к нужному типу. А так, компилятор все равно приводит var к pointer"у


 
Digitman ©   (2003-10-06 16:08) [4]

синонимы, да ... по логике ... но не по поведению компилятора при попытке изменения передаваемого указателя внутри вызываемого кода

в случае с var указатель передается неявно, и обратиться к нему (переданному указателю) по записи фактически нет возможности (ну или с великими и не стоящими того премудростями)

в случае передачи форм.параметра типа pointer факт.параметр очень легко изменить, используя тем самым его как лок.переменную п/программы.. изменение указателя на факт.данные никак не затронет ни сами данные ни их факт.местоположение в памяти


 
Nemaster   (2003-10-06 16:11) [5]

Всем спасибо ОГРОМНОЕ за разъяснение ентой премудрости.


 
KSergey ©   (2003-10-06 16:23) [6]

Нельзя ли для меня вот это чуть подробнее:

> [2] han_malign © (06.10.03 15:48)
>
> procedure FFF(var aData; aDataCount: integer);
> var i: integer;
> _data: array[0..0] of TMyType;
> begin
> for i:=0 to aDataCount-1 do ... _data[i]...
> end;

Передается вроде aData, а в цикле используется _data. А каким макаром _data начнет указывать на aData? Или здесь подразумевается, что перед циклом надо присвоить значение _data? Или оно как-то само собой произойдет? А как это так?


 
han_malign ©   (2003-10-06 16:49) [7]

>KSergey © (06.10.03 16:23) [6]
упс - обознатушки
_data: array[0..0] of TMyType absolute aData;


 
KSergey ©   (2003-10-06 17:19) [8]

Ага, понял
Спасибо



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

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

Наверх




Память: 0.48 MB
Время: 0.037 c
8-51352
Strori
2003-05-21 10:58
2003.10.16
Ссылка в теле картинки


4-51554
i-s-v
2003-08-11 01:51
2003.10.16
Как читать строки из реестра


3-51108
diokant
2003-09-24 13:27
2003.10.16
Как обеспечить отображение значения поля, измененного триггером


9-51057
D@V!D
2003-04-10 15:43
2003.10.16
DelphiX для Delphi6


1-51276
Alex21
2003-09-27 07:43
2003.10.16
Расчипление строки