Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.016 c
1-51330
RudeBoy
2003-10-05 20:59
2003.10.16
Как поменять в TShellListView директорию?


1-51171
Vin_Ghost
2003-10-05 15:28
2003.10.16
системы счисления


4-51552
Legafor
2003-08-12 16:39
2003.10.16
Как определить язык


1-51226
Dimaz-z
2003-10-03 17:48
2003.10.16
Как узнать информацию и билде и дате компиляции?


14-51433
Esu
2003-09-26 01:05
2003.10.16
Что будет если депутаты начнут писать программы




   Наверх