Главная страница
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.019 c
3-51112
DelphiNew
2003-09-25 09:47
2003.10.16
FoxPro -->Interbase


1-51213
SergP
2003-10-04 09:14
2003.10.16
Как разбить форму на части?


14-51411
CinCinNut
2003-09-26 13:23
2003.10.16
Видеопроекторы


14-51479
Сергей Чурсин
2003-09-17 10:43
2003.10.16
---|Ветка была без названия|---


3-51117
DimChan
2003-09-25 07:34
2003.10.16
задача установить прогу на ПК с ОС: Win 95 и без BDE