Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 5:

Производные типы. Тип указатель: указатели на объекты

< Лекция 4 || Лекция 5: 123 || Лекция 6 >

Лабораторная работа 4. Производные типы. Тип указатель: указатели на объекты.

Цель работы: изучить классификацию производных типов, тип указатель и соотношения между именами, адресами и значениями переменных, научиться использовать указатели в программных кодах на языке C++.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе данные различных типов (в соответствии с условиями задач), выполняет их обработку в соответствии с требованиями задания и выводит результат на экран. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является допустимый диапазон значений используемых числовых типов в языке С++.

Теоретические сведения.

Ознакомьтесь с материалом лекции 4.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  • В программе определите и инициализируйте переменную типа double, указатель double * и указатель типа void *. Присвойте указателям адрес переменной. Напечатайте адрес переменной, значения указателей и значения, получаемые при разыменовании указателей. Чтобы продемонстрировать роли и последовательность выполнения унарных операций получения адреса & и разыменования *, выведите на печать значение выражения *&имя_переменной.
  • Задано натуральное число. Разместите в памяти последовательно все его цифры, используя указатели и операции над ними.
  • Определите и инициализируйте переменную типа double. Определите указатели char *, int *, double *, void *, инициализируйте их адресом переменной. Напечатайте значения указателей, их размеры и длины участков памяти, которые связаны с выражениями, разыменовывающими указатели.

Указания к выполнению работы.

Каждое задание необходимо решить в соответствии с изученными методами работы с указателями в языке С++. В отчете следует пояснить различия в использовании указателей разных типов, адресующих один и тот же участок памяти, и отразить основные случаи использования в программе указателя типа void *.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

Контрольные вопросы

  1. Почему указатель не может существовать как самостоятельный тип?
  2. С какой целью в программе может быть использован указатель типа void?
  3. Что будет являться результатом разыменования указателя типа void без приведения типов?
  4. Как изменится значение указателя после применения к нему операции инкремента (декремента)?
  5. Почему для указателей определены сложение и вычитание только с целыми константами?
  6. В чем отличие указателя на константу от указателя-константы?
  7. Два указателя разных типов указывают на одно и то же место в памяти. Сравните результаты операций разыменования и взятия адреса с такими указателям. Сравните значения указателей.
  8. Если объект занимает в памяти несколько байтов, то какой адрес является значением указателя на этот объект?
  9. Каким образом при разыменовании указателей становится известно, сколько байтов памяти доступно?
< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Андрей Садовщиков
Андрей Садовщиков
Россия