![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
<B>Указатели</B> [D5, WinXP]
DenKop © (2002-09-22 02:20:00)Делаю так:
var
P1:pointer;
IntPtr:^Smallint;
........
begin
........
IntPtr:=P1;
for i:=1 to 100 do
begin
Buf:=IntPtr^;
.........
IntPtr^:=Buf;
IntPtr:=IntPtr+SizeOf(SmallInt); {здесь баг}
end;
........
end;
Хочу сместить указатель на 4 байта вправо, но компилятор
матится следующей месагой:
"Operator not applicable to this operand type"
В общем про задачу:
В P1 читаю из файла 100 значений SmallInt и хочу с ними
чего-то сделать. После этого нужно скинуть их обртано в файл.
Т.к. файл может быть большого размера, решил читать по 400байт
в память и там сними чего-то делать. Ну и чтобы обратится к
каждому из значений блока P1, хочу изменить значение указателя,
но как я уже говорил компилятор кричит о недопустимом действии
с данным типом.
Заранее благодарен.
DenKop (2002-09-24 22:25:00) [1]
> Юрий Зотов
Да, действительно. Спасибо, что заметили.
И про массив хорошо сказанно я как то не догадлся. Думаю будет намного проще. Пойду попробую.
> MBo, kex86
Думаю следует последовать совету Юрия Зотова.
Юрий Зотов (2002-09-22 11:55:00) [2]А зачем такие навороты? Заведите обычный массив из 100 SmallInt, и спокойно работайте с ним. Без всяких указателей.
И еще: размер SmallInt - 2, а не 4 байта.
MBo (2002-09-22 06:24:00) [3]К типизированным указателям можно применять операции Inc и Dec, при этом они смещаются на SizeOf указанного типа
Inc(IntPtr)
Inc(IncPtr,4)
Для нетипизированных можно так:
P:Pointer;
P:=Pointer(Cardinal(P)+SizeOf(Integer))
kex86 (2002-09-22 02:27:00) [4]А как определен buf ?