Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
ВнизВ чём разница между 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c