![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему один кусок кода работает а второй нет ведь они эквивалентн
MegaVolt © (2004-12-03 17:07:00)Это работает:
var
temp,Data:ByteArray;
...
temp:=ByteArray(@Data[i*128]);
AT17LV010.Write(i,temp);
...
AT17LV010.Write(i:integer;const Buf);
Это нет. Говорит переменную хочу. А зачем переменная ведь я вроде как константу передаю?
var
Data:ByteArray;
...
AT17LV010.Write(i,ByteArray(@Data[i*128]));
...
AT17LV010.Write(i:integer;const Buf);
MegaVolt (2004-12-03 19:12:00) [21]есди в
AT17LV010.Write();Buf описать как ByteArray тоAT17LV010.Write(i,ByteArray(@Data[i*128]));проходитAT17LV010.Write(i, Data[i*128]);непроходит.
MegaVolt (2004-12-03 17:56:00) [22]Data[i*128] не работает :( Я пробовал. В функцию передаётся массив без первого элемента :(
Verg (2004-12-03 17:25:00) [23]
> AT17LV010.Write(i:integer ;const Buf);
Это передача нетипизированной ссылки на что-то.
В первом случае ты передаешь ссылку на переменную temp.
Во втором - непонятно на что.
Слово const указывает в данном случае, что само значение переменной на которую передается ссылка изменятся на самом деле не будет. Это может помочь оптимизатору.
То же самое, только без "помощи оптимизатору":
AT17LV010.Write(i:integer ; var Buf);
> temp:=ByteArray(@Data[i*128]);
> AT17LV010.Write(i,temp);
А что тебе не дает написать по-простому, без выкручивания рук себе и компилеру:
AT17LV010.Write(i, Data[i*128]);