BIGLIB
  большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно
 
АСТРОЛОГИЯ
  книги по астрологии
 
КРИМИНАЛ
  книги про криминал
 
ДЕТЕКТИВЫ
  детективы известных
   писателей
 
ФАНТАСТИКА
  фентези, фантастика,   фантастические повести
 
ПРИКЛЮЧЕНИЯ
  книги про приключения,   путешествия
 
ПОЛИТИКА
  книги про политиков,   репрессии
 
ПСИХОЛОГИЯ
  разнообразная литература   по психологии
 
КЛАССИКА
  классическая литература
 
КОМПЬЮТЕРНАЯ
  ЛИТЕРАТУРА
  про компютерное железо,   документация, языки   программирования
 
РЕЛИГИЯ, АТЕИЗМ
  книги про религию
 
ФИЛОСОФИЯ
  книги, которые заставляют   задуматься над   окружающим тебя миром.
 
ЭНЦИКЛОПЕДИИ
  самые интересные   энциклопедии на
   разные темы
 
МЕДИЦИНА
  медицинские книги,   методички,
   народные лечебники
 
КУЛИНАРИЯ
  рецепты тортов,   консервирование,
  все о спиртных
  напитках.
 
СТИХИ
  стихи популярных и не   очень авторов
 
ТВОРЧЕСТВО
  народное творчество,   стихи, песни и т.д.
 
ЮМОР
  анекдоты, приколы,   смешные истории
 
ЛЮБОВНЫЙ РОМАН
  мир высоких чувств и   любовных грез
 
ЭРОТИКА
  эротические рассказы,   книги о технике секса,   кама-сутра и др.




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Turbo C++ Version 1.0 Programmer's Guide
Автор ""
Размер 211728 Байт
Страница 23 из 30
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

     Если опция выравнивания включена,  топриведенный пример
структуры имел бы добавленный перед double байт, и весь объ-
ект в целом занимал бы 32 байта.

  Пространство имен структур

     Имена тегов структур разделяют общее  пространство имен
стегами объединений и перечислимых данных (однако в С++ име-
на входящих в структуру перечислимых данных находятсяв  дру-
гом адресном пространстве). Это означает, что в пределах од-
ного контекста такие теги  должны  иметь  уникальные  имена.
Однако,  имена  тегов не обязаны отличаться от идентификато-
ров,  находящихся  в  трех  других  адресных  пространствах:
пространстве  имен меток,  пространстве (пространствах) имен
компонентов и едином адресном пространстве  (которое состоит
из имен переменных, функций, имен typedef и нкмераторов).

     Имена компонентов  в пределах данной структуры или объ-
единения лбязаны быть уникальными,  но среди разных структур
или объединений они могут совпадать. Например,

    goto s;
    ...
     struct s (* // так можно;  теги и имена меток находятся
в разных // адресных пространствах
     int s;  // так можно;  теги, имена меток и имена компо-
нентов // дятся в разных адресных пространствах
     float s;//  так  нельзя:  повторение  имени компонентов
структур *) s;  // так можно;  пространства имен  переменных
различны // В С++ это допустимо только если s не имеет
       // конструктора.

     union s (* // так нельзя:  повторение имен в пространс-
тве тегов int s;  // так можно: новое пространство компонен-
тов float f;
    *) f;       // так можно: пространство имен переменных

    struct t (*
     int s; // так можно: следующее пространство имен компо-
ненто
       ...
    *) s;       // так нельзя: повторение имен переменных

Неполные объявления

     Указатель структуры типа А допустим в объявлении другой
структуры В до объявления структуры А:

     struct A;// неполное объявление struct B  (*  struct  A
*pa *);
    struct A (* struct B *pb *);

     Первое объявление А называется  неполным,  поскольку  в
этой точке отсутствует определение А.  В данной ситуации не-
полное объявление допустимо, поскольку в объявлении В размер
А необязателен. Битовые поля


                           - 67 -
     Структура можетсодержать любые комбинации битовых полей
с данными других типов.

     Целочисленные компоненты типа signed или unsigned можно
объявить битовыми полями шириной от 1 до 16 бит.  Ширина би-
тового поля и его опциональный идентификатор задаются следу-
ющим образом:

      спецификатор-типа <идентификатор-битового поля>:ширина;

     где спецификатор-типа это char,  unsigned char, int или
unsigned int.  Битовые поля располагаются с нижнего и кончая
саршим битом слова.  Выражение "ширина" должно быть задано и
должно давать целочисленную константу со значением в  диапа-
зоне от 0 до 16.

     Если идентификатор  битового поля опущен,  то число би-
тов,  заданное выражением "ширина", распределяется в памяти,
но поле при этом остается недоступным программе.  Это позво-
ляет создавать битовые шаблоны для, например, аппаратных ре-
гистров компьютера,  в которых некоторые биты не используют-
ся. Пример:

    struct mystruct (*
       int i:2;
       unsigned  j:5;
       int  :4;
       int k:1;
       unsigned  m:4;
    *) a, b, c;

 создает следующее распределение памяти.

 ------------------------------------------------------------
     \! 15\!  14\! 13\! 12\! 11\! 10\! 9 \! 8 \! 7 \! 6 \! 5
\! 4 \! 3 \! 2 \! 1 \! 0 \!
 ------------------------------------------------------------
     \! x \!  x \! x \! x \! x \! x \! x \! x \! x \! x \! x





\! x \! x \! x \! x \! x \! ------------------------------------------------------------ \!<------------->\!<->\!<------------->\!<------------- ---->\!<----->\! ------------------------------------------------------------ \! m \! k \!не используется\! j \! i \! ------------------------------------------------------------ Целочисленные поля хранятся в виде дополнения до двух, причем крайний левый бит побещается в MSB (наиболее значащий бит).Для битового поля типа Int (например, signed) MSB ин- терпретируется как знаковый бит. Битовое поле шириной 2, со- держащее двоичное 11, будет, следовательно, в случае типа unsigned интерпретироватьсякак 3, а в случае Int как -1. В предыдущем примере допустимое выражение a.i = 6 поместит в a.i двоичное 10 = -2, не выдавая каких-либо предупреждений. Поле k типа signed int шириной 1 может содержать только зна- чения -1 и 0, так как битовый шаблон 1 будет интерпретирован как -1. Примечание Битовые поля могут быть объявлены только в структурах, объединениях и классах. Доступ к ним выполняется теми жесе- лекторами компонентов (. и ->), что используются для доступа к компонентам других типов. Кроме того, битовые поля вызыва- ют некоторые проблемы с созданием переносимых кодов, пос- кольку организация битов в байтах и байтов в словах зависит от конкретной машины. - 68 - Выражение &mystruct.x недопустимо, так как x это иден- тификатор битового поля, а никакой гарантии, что mystruct.x имеет адрес на границе байта, нет. Объединения Объединения соответствуют типам вариантных записей язы- ков Pascal и Modula-2. Типы объединений являются производными типами, разделя- ющими многие синтаксические и функциональные свойства типов структур. Главное отличие между ними состоит в том, что объ- единение позволяет быть "активным" одновременно только одно- му компоненту. Размер объединения равен таким образом разме- ру своего максимального компонента. Одновременно в памяти может находиться значение только одного компонента лобъеди- нения. В следующем простом случае union myunion (* /* тег объединения = myunion */ int i; double d; char ch; *) mu, *muptr=μ идентификатор mu типа union myunion может служить для хранения 2-байтового значения int, 8-байтового значения double или 1-байтового char, но одновременно - только одного из этих значений. Обе операции sizeof(union myunion) и sizeof (mu) возв- ращают значение 8, но когда mu содержит объект типа int, то 6 байт остаются неиспользованными (туда помещаются симво- лы-заполнители), а когда mu сщдержит объект типа char - то 7 байт. Доступ к компонентам объединения выполняетсяпри помощи селекторов компонента структуры (. и ->), но требуется соб- людать осторожность: mu.d = 4.016; printf("mu.d = %f\n",mu.d);// порядок: на дисплее mu.d = 4.016 printf("mu.i = %f\n",mu.i);// забавный результат ! mu.ср = 'A'; printf("mu.ch = %c\n",mu.ch); // порядок: на дисплее mu.ch = A printf("mu.d = %f\n",mu.d); // забавный результат ! muptr->i = 3; printf("mu.i = %d\n",mu.i); // порядок: на дисплее mu.i = 3 Второй оператор printf допустим, поскольку mu.i цело- численного типа. Однако, битовая комбинация в mu.i соответс- твует части ранее присвоенного значения типа double и не даст как правило полезной целочисленной интерпретации. При правильных преобразованиях указатель объединения может указывать на любые его компоненты, и наоборот. Объявления объединений Общий синтаксисобъявления объединений во многом напоми- нает синтаксис объявления структур. Различия состоят в сле- дующем: 1. Объединения могут содержать битовые поля, но актив- ным бывает только одно изних. Все они начинаются в начале объединения. - 69 - 2. С++ : В отличие от структур С++, объединения С++ не могут использовать спецификаторы класса доступа:public, private и protected. Все поля объединения имеют доступ


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [23] 24 25 26 27 28 29 30


adfun.ru









Форум раскрутка сайта и интернет-реклама
реклама - рекламное агентство -
Интернет PR агентство чат и форум
волчат знакомства - сайт знакомств
бесплатные компьютерные игры
фото знакомства
новые стеклопакеты -
качественное остекление балконов
портал - пластиковые окна -
закажите окна пвх в Москве

частная стоматология в Москве:
надежная стоматологическая клиника
протезирование зубов и
отбеливание зубов в стоматологии
Музыка - скачать mp3 музыка
каталог партнерские программы
ручной бесплатный обмен ссылками цифровые камеры цифровые фотоаппараты -
цифровые видеокамеры

театры - заказ билетов в театр -
магазин - продажа компьютеров
в Москве форум Испания - жилье -
недвижимость в испании

турфирма - испания туры
Переводы - бюро переводов
Законы - закон о товарных знаках,
Грузовые перевозки. АсМАП. Дальнобой закон о рекламе
Интернет казино
реклама на форуме и контекстная реклама
на Яндексе Баннерная сеть и
интернет каталог сайтов Holiday.Ru
Форумы политика, лучшие анекдоты
знакомства.