Главная страница
    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.011 c
8-51360
Olim
2003-06-16 16:55
2003.10.16
Как записать звук из микрафона


1-51284
NewD
2003-10-06 11:14
2003.10.16
Не работает Web Server Application


1-51272
Son!K
2003-10-06 17:27
2003.10.16
Вывест в эдит...


9-51048
Арм
2003-04-15 03:57
2003.10.16
Беда с текстурами в OpeGL


3-51069
vil
2003-09-25 14:50
2003.10.16
Выполнение хр процедуры с параметрами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский