Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы Тех.програм.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
291.5 Кб
Скачать
  1. Указатели. Динамические переменные. Их использование

  1. В программах на языке C++ широко используется переменная типа указатель. Значение, которой является адрес другой переменной или функции. В описании необходимо сообщить не только, что данная переменная является указателем, но и то что она ссылается на переменную некоторого тип, то есть компилятору необходимо определить сколько байт памяти связаны с данными указателя.

    1

    Тип * имя;

  2. Наиболее важными действиями связанные с указателями является операция обращения по адресу * и операция определения адреса &. Операция * служит для присваивания и считывания значения переменной, на которую ссылается указатель, а операция & возвращает адрес памяти своего операнда. Причём размер записи зависит от применяемой модели динамической памяти. В приложениях C++ возможно использование 6 моделей памяти.

  3. Tiny – крошечная Small – маленькая Medium – средняя Compact – компактная Large – большая Huge – огромная

  4. Для адресации данных при первых моделей памяти используют ближние, короткие, двухбайтовые указатели. Они содержат только адресное смещение. Данные модели поддерживают доступ только к 64 кб программного кода. В независимости от модели памяти разработчик может обменять размер указателя по умолчанию и предложить свой, используя служебные слова near/far. При этом описание указателя будет следующим:

    1

    Тип near/far * имя;

  5. Компилятор может преобразовать ближний указатель в дальний, но не наоборот. Использование модификатора far ограничивает размер одной относительной единицы данных с 64 кб. При работе с динамическими переменными типа указателя. Самой распространенной ошибкой является, то что в описании указатель не инициализируется, что приводит к тому, что компилятор резервирует память только под хранения адреса.

    1

    int *x *y;

  6. Для динамических переменных *x *y отводится только 2 байта под хранение адреса и не отводится 2 байта переменной типа int.

    1

    int *z=10;

  7. При работе с указателями следует: 1) Предварительно инициализировать указатель, то есть либо при описании присвоить ему начальное значение Int *z=10; либо присвоить указателю адрес уже инициализированной переменной. Пример.

    1

    int i=10, *j=&i;

  8. 2) Использовать функции распределения динамической памяти, которая описана в библиотеке alloc.h.

  9. Виды функций: 1) Void *malloc (unsigned s) – выделяет память размером s байт. 2) Void *calloc (unsigned nel, unsigned els) – выделяют память для nel элементов для которой размер каждого элемента равен els. 3) Void *realloc (void *blok, unsigned s) – изменяет размер ранее выявленной памяти. Для * blok до величины s байт. 4) Void far *faralloc (unsigned long nel, unsigned long els) – выделяет память для дальней её модели под nel элементов размер каждого из которых равен els. 5) Void free (void *blok) – освобождает ранее выделенную память.

  10. Поскольку все функции работают с динамической памятью, имеет тип Void, то они совместимы с указателями любого типа.

  11. 3) Для определения размера памяти необходимого под хранение какой-либо переменной используется функции sizeof (); В скобках указывается либо имя переменной, либо тип.