Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.014 c
14-51409
dmtr
2003-09-29 13:48
2003.10.16
Интересный вопрос


6-51379
PsoFT
2003-08-19 15:57
2003.10.16
Отправка сообшение.


14-51414
PVOzerski
2003-09-26 10:59
2003.10.16
Теперь обрушил NT у себя на работе... Как бы оживить


3-51148
Alexander Vasjuk
2003-09-24 12:15
2003.10.16
Не видны изменения, сделанные другими клиентами


3-51097
norman
2003-09-25 15:06
2003.10.16
SQL запрос - в каждой строке разность полей двух соседних записей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский