Использование указателей в программах на языках С/С++/С# . Васильев В.Г. - 25 стр.

UptoLike

Составители: 

point = (int far *)0x00000400L;
printf("Значение = %x\n",*point&0x00ff);
}
В данном случае переменной point, объявленной как far указатель, присвоен
адрес 0000:0400. Для размещения числа 0x00000400 в памяти требуется 4 байта
- длинное целое (использован модификатор L). Вследствие этого выбран
указатель типа far и сделано его приведению к типу (int far *) для того, чтобы
левая часть оператора присваивания бала эквивалентной правой. При
выполнении последнего оператора программы на экран будет выдан адрес
порта – 3f8.
Еще один пример демонстрирует использование указателей при создании
функции, которая организует программную задержку на second секунд.
void delay ( float second )
{
/* 4-x байтная переменная по адресу 0000:046C -содержит текущее
значение числа тиков таймера .Частота тиков таймера ПК - 18.2
раза/сек*/
float delay;
long far *pcurtick = (long far *)0x0000046CL;
delay = second * (float)18.2 + *pcurtick;
while ((float)*pcurtick <= delay);
return ;
}
Главным в двух данных примерах является демонстрация возможности
инициализации указателя числом (конкретным адресом). При разработке
Windows программ этого делать нельзя. Обработчик события в Windows-
программе
void __fastcall TForm1::Panel1Click(TObject *Sender)
{
int far *point;
point = (int far *)0x00000400L;
Label1 -> Caption = *point;
return;
}
компилируется, но выполнение программы завершается выдачей окна с
сообщением об ошибке.
25