Разыменование указателей




Учебно – методическая карта занятия № 4

Специальность:

Курс: 3 Семестр:6

Предмет: «Системное программирование»

Блок ПП.62 Використання СІ для системного програмування

Модуль ПФ.Е.01.ПП. О.46.10 Вказiвникi.

Продолжительность занятия: 2 часа

Тема занятия: Указатели

Цель занятия:

  1. Усвоить знания по реализации указателей в языке программирования С++.
  2. Развивать технические умения; развивать умение выделять главное, выполнение сравнительного анализа. Вооружить студентов методологическим подходом к практической деятельности.
  3. Способствовать развитию логически излагать свои мысли, учить образному мышлению. Формировать внимание, трудолюбие, аккуратность, культуру поведения.

Вид занятия: комбинированное

Материально - техническое обеспечение рабочего места студента:

1. ПК

2. Презентация

3. Правила по ТБ при работе с ПК (инструкция)

Литература:

 

Глушаков С. В., Коваль А. В., Смирнов С. В. Язык программирования С++: Учебный курс. — Харьков: Фолио; M.: OOO «Издательство АСТ»Э 2001. — 500 с.

Ход занятия:

I. Организационный момент

Проверка наличия студентов.

II. Актуализация ранее приобретенных опорных знаний

Что понимается под функцией на языке программирования с++?

Для чего используется прототип функции?

Из каких частей состоит определение функции?

III. Организация усвоения материала

План:

Тема: Указатели

План:

1. Понятие указателя

2. Разыменование указателей

4. Указатели на указатели

5. Указатели на функции

6. Ссылки

 

 

IV. Подведение итогов занятий.

1). Что называется указателем?

2). Как узнать адрес конкретной переменной?

3). Для чего предназначена операция разыменования?

V. Домашнее задание стр. 64-81

1. Пример использования указателя на функцию. стр.91 (записать в тетрадь)

2. Передача параметров по ссылке и по значению стр. 93-97


Конспект лекции «Указатели»

 

Понятие указателя

Любой объект программы будь то переменная базового или же производного типа, занимает в памяти определенную область. Местоположение объекта в памяти определяется его адресом. При объявлении переменной для нее резервируется место в памяти, размер которого зависит от типа данной переменной, а для доступа к содержимому объекта служит его имя (идентификатор).

Для того чтобы узнать адрес конкретной переменной, служит унарная операция взятия адреса. При этом перед именем переменной ставится знак амперсанда (&).

Следующий ниже пример программы выведет на печать сначала значение переменной Varl и Var2, а затем ее адрес:

#include <iostream>

#define end3. '\n'

int main()

{

unsigned int Varl = 40000;

unsigned int Var2 = 300;

cout << "Значение1: " << Varl << endl;

cout << "Адрес: " << &Varl << endl;

cout << "Значение2: " << Var2 << endl;

cout << "Адрес: "<<&Var2 << endl;

return 0;

}

В результате будет выведено:

Значение1: 40000

Адрес: 0x0068fe00

Значение2: 300

Адрес: 0x0068fdfc

 

Результат может отличаться при повторном запуске программы, так как невозможно предугадать, по какому адресу начнут размещаться переменные.

Мощным средством разработчика программного обеспечения на С++ является возможность осуществления непосредственного доступа к памяти. Для этой цели предусматривается специальный тип переменных - указатели.

Указатель (pointer) представляет собой переменную, значение которой является адресом ячейки памяти.

Указателем называется адрес переменной в оперативной памяти. Переменная указательного типа – это переменная, размер которой достаточен для хранения адреса оперативной памяти.

Указатель может ссылаться на переменную (базового или производного типа) или функцию. Наибольшая эффективность применения указателей в разработке приложений достигается при использовании их с массивами и символьными строками.

Переменные-указатели объявляются с помощью символа "*", который добавляется после названия обычного типа данных.

Объявление указателя имеет следующий синтаксис:

тип_объекта* идентификатор;

-тип_объекта - определяет тип данных, на которые ссылается указатель с именем идентификатор

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

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

Рассмотрим пример объявления и инициализации указателя.

char Symbol = 'Y';

char *pSymbol = &Symbol;

long Capital = 304L;

long* pLong;

pLong = &Capital;

 

В приведенном фрагменте объявляется символьная переменная Symbol и инициализируется значением ‘Y’, затем определяется указатель на символьный тип данных pSymbol, значение которого назначается равным адресу переменной Symbol. Вслед за этим объявляется переменная Capital типа long и указатель на этот же тип pLong, после чего производится инициализация указателя адресом переменной Capital.

 

Если в программе используется много однотипных указателей, то для их объявления можно ввести новый тип. Это делается с помощью оператора описания нового типа "typedef". Например, если записать оператор:

typedef int* IntPtrType;

то в программе можно будет объявлять сразу несколько переменных-указателей, не применяя для каждой из них символ "*":

IntPtrType number_ptr1, number_ptr2, number_ptr3;

Разыменование указателей

Для того чтобы получить (прочитать) значение, записанное в некоторой области, на которую ссылается указатель, используют операцию косвенного обращения, или разыменования (*). При этом используется имя указателя со звездочкой перед ним:

long double Num = 10;

long double Flag;

long double *ptr = &Num;

Flag = *ptr;

cout << Flag;

 

В приведенном фрагменте объявляются две переменные двойной точности Num и Flag и указатель fetr) на тип long double, проинициализированный адресом переменной Num. После этого посредством косвенного доступа к переменной Flag присваивается значение, хранящееся по адресу, указанному в ptr, то есть фактически значение переменной Num, что и подтверждает вывод на печать.

 

На практике довольно широко применяется так называемый пустой указатель (типа voidb который может указывать на объект любого типа. Для получения доступа к объекту, на который ссылается указатель void, его необходимо предварительно привести к тому же типу, что и тип самого объекта.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: