Четвертый Borland C++ и его окружение

       

Указатели сегментов


В объявлениях типа указателя сегмента используется __seg. В

результате получаются 16-битовые указатели сегментов. Синтаксис

__seg следующий:

тип_данных _seg *идентификатор

Например,

int _seg *name

Любое обращение по ссылке через "идентификатор" предполагает

смещение 0. В арифметических операциях с указателями выполняются

следующие правила:

  • Нельзя использовать с указателями сегментов операции ++,

    --, +- или -=.

  • Нельзя вычитать один указатель сегмента из другого.
  • При сложении сегментного указателя с ближним (near) указателем результатом будет дальний (far) указатель, который формируется из сегмента, задаваемого сегментным указателем, и смещения из ближнего указателя. Эта операция

    разрешена только в том случае, если два указателя указывают на один и тот же тип, либо если один из указателей

    указывает на тип void. Независимо от указываемого типа

    умножение смещения не происходит.

  • Когда сегментный указатель используется в выражении обращения по ссылке, он также неявно преобразуется в дальний

    указатель.

  • При выполнении операции сложения или вычитания целочисленного операнда и сегментного указателя результатом является дальний указатель, где сегмент берется из сегментного указателя, а смещение получается умножением размера

    объекта, на который указывает целочисленный операнд.

    Арифметическая операция выполняется таким образом, как

    если бы целое складывалось с указателем far или вычиталось из него.

  • Сегментные указатели могут присваиваться, инициализироваться, передаваться в функции и из функций, сравниваться, и т.д. (Сегментные указатели сравниваются по правилам

    для unsigned int). Другими словами, за исключением перечисленных выше ограничений, они обрабатываются так же, как и любые другие указатели.



  • Содержание раздела