Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка6.docx
Скачиваний:
5
Добавлен:
17.11.2018
Размер:
32.96 Кб
Скачать

Вопросы для повторения

1. Как явно найти адреса для обыкновенных переменных?

Нужно только

применить к переменной операцию определения адреса,

представленную знаком &, чтобы получить ее расположение. Например,

если home — переменная, &home является ее адресом

2. В какой системе счисления выводит на экран адреса объект cout?

Когда отображаются адреса, cout использует шестнадцатиричную

систему представления, потому что она является обычной системой

представления, используемой при описании памяти.

3. Дайте определение типу данных – указатель.

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

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

именованную величину, а значение — как производную величину.

Специальный тип переменной — указатель — содержит адрес

значения. Таким образом, название указателя представляет его

местоположение. Применяя операцию *, называемую косвенным

значением или операцией разыменования, получаем значение по

данному адресу.

4. Для чего нужна операция разыменования?

Символ "*", который используется

для обозначения умножения. В C++ из контекста понятен смысл символа

— умножение это или разыменование). Предположим, например, что

manly — это указатель. Тогда manly представляет собой адрес, a *manly

— значение по данному адресу. Комбинация *manly становится эквивалентом обычной переменной типа int.

5. Объявление и инициализация указателей

C++ комбинация int * является производным типом "указатель на int".(Для объявления указателей на другие типы переменных используется тот же самый синтаксис)

В этом случае обычный указатель, не являющийся указателем на значение, получает начальное значение, т.е. операторы

int higgens = 5;

int * pi = &higgens;

присваивают указателю pi (но не *pi) значение &higgens

6. Расскажите правило расстановки пробелов при объявлении

указателя.

Золотое правило для указателей: ВСЕГДА присваивайте

указателю определенное и подходящее значение адреса до

применения к нему операции разыменования (*).

7. К чему приведет следующее описание типов:

int* pi, р2;

ни к чему не приведет

8. Поясните, эквивалентны-ли следующие надписи:

Rambler и *rambler

нет

9. Поясните, эквивалентны-ли следующие надписи:

box и &box

да

10. Поясните, верен–ли код:

int * rambler=3;

нет

11. Поясните что произойдет при выполнении операции

присваивания, если в этой операции участвует указатель, с пока

еще не определенным адресом?

12. Принадлежат ли указатели целочисленным типам?

Указатели не принадлежат к целочисленным типам.

13. Можно-ли присвоить целочисленное значение переменной-

указателю? Объясните ответ.

Следовательно, нельзя просто присвоить целочисленное значение переменной- указателю.

14. Распределение памяти с помощью оператора new. Приведите

пример.

Вы

указываете оператору new, для какого типа данных выделяется память,

new ищет блок памяти нужного размера и возвращает адрес этого

блока. Присваивая этот адрес указателю, вы получаете искомое. Ниже

приводится пример реализации описанной технологии:

int * pn = new int;

Часть new int сообщает программе о том, что необходимо некоторое новое хранилище, подходящее для размещения переменной типа int. Оператор new использует тип для вычисления количества необходимых байтов. Затем он отыскивает область памяти и возвращает адрес. Далее присваиваем адрес переменной рn, которая объявляется как указатель на тип int. Теперь рn является адресом, а *рn — значением, хранимым по этому адресу. Сравните это с присваиванием указателю адреса переменной: