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

UptoLike

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

В этом случае переменной point, будет выделено уже 4 байта для хранения
сегментного адреса переменной и смещения ее в сегменте. Сказанное
иллюстрируется следующей программой:
/* программа # 2.1 */
# include <stdio.h>
void main ( void )
{
char Ch,far *point_Ch;
int count,far *point_count;
Ch = 'T';
count = 0;
point_Ch = &Ch;
point_count =&count;
printf("Адрес переменной Ch = %Fp\n",point_Ch);
printf("Адрес переменной count = %Fp\n",point_count);
}
Спецификация формата Fp используется для выдачи на экран значений
дальних указателей. При выполнении этой программы был получен такой
результат:
Адрес переменной Ch = 4BB6:1762
Адрес переменной count =4BB6:175C
Адрес переменной count =4BCE:175C - это логический адрес, состоящий их
двух компонент - адреса сегмента 4BB6 и смещения 175C этой переменной
относительно начала сегмента. Нетрудно видеть, что значение адреса
сегмента для переменных Ch и count одинаково, так как они объявлены внутри
тела функции и, следовательно, их место на стеке программы. Число 4BB6-
адрес сегмента стека данной программы.
В DOS- программах far указатели используются для обращения к ячейкам
памяти машины за пределами адресного пространства выделенного программе.
Рассмотрим следующий пример. C адреса 0000:0400 начинается область
памяти, которую называют областью данных BIOS. Первые 8 байт
предназначены для хранения адресов 4 коммуникационных портов (по два
байта на адрес – число типа int ). Требуется прочитать адрес порта COM1.
/* программа # 2.2 */
# include <stdio.h>
void main ( void )
{
int far *point;
24