Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему один кусок кода работает а второй нет ведь они эквивалентн


Страницы:   1 2

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]);


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо