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

Указатели

Оглавление

Часть 2

Конспект лекций

Разработка программ при работе с массивами

Картинки массивов при записи предусловий, постусловий и инвариантов. Примеры: задачи разделения и слияния массивов, перестановка сегментов массива (циклический сдвиг) и т.п. Линейный и бинарный поиск в массиве. Простые алгоритмы сортировки (выбором, вставками, обменами). Работа с двумерными и многомерными массивами.

Не успел дописать. Некоторые примеры по этому разделу в Приложениях


Часть 2. 1

Оглавление. 2

8. Указатели. 4

8.1. Указатели. 4

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

Работа с указателями. 5

Арифметика указателей. 7

Ошибки при работе с указателями. 8

8.2. Указатели и массивы.. 10

9. Функции и структура программы.. 12

9.1. Создание и использование функций. 13

Процедурный подход к разработке программ.. 13

Определение функций в программе. 19

Завершение работы функции (инструкция return) 20

Список параметров функций. 21

Обращение к функциям в программе. 21

Передача данных по значению.. 22

Передача данных с помощью указателей. 23

Передача данных по ссылке. 25

Перегружаемые функции. 26

Параметры по умолчанию.. 27

Функции с переменным числом параметров. 27

Рекурсивное использование функций. 29

Передача функций в качестве параметров. 32

Встраиваемые функции (inline - функции) 33

Прототипы функций. 34

9.2. Структура программы. Глобальные и локальные данные (области видимости и время жизни) 35

Структура программы.. 35

Глобальные и локальные данные. 35

Классы памяти. 36

Многофайловые проекты.. 39

10. Структуры, объединения, перечисления. 39

10.1. Структуры.. 39

Определение структур. 39

Доступ к полям структур. 40

Указатели на структуры.. 42

Структурные параметры функций. 42

10.2. Объединения. 44

Обычные объединения. 44

Анонимные объединения. 45

10.3. Перечисления. 46

11. Организация ввода/вывода и работа с файлами. 46

11.1. Потоки для работы с файлами. 46

Общие сведения. 46

Пример работы с файлом.. 46

Создание потока, открытие и закрытие файла. 47

Запись и чтение данных в текстовых файлах. 49

Запись и чтение данных в двоичном режиме. 49

Как обнаружить конец файла?. 52

Прямой доступ при работе с файлами. 52


8. Указатели

Указатели и ссылки являются одними из самых важных и достаточно сложных для понимания и использования средств языка программирования. Они ориентированы на прямую работу с памятью компьютера. С помощью этих средств реализуется работа с динамической памятью и динамическими объектами, возвращение из функций измененных данных и многое другое. К использованию указателей и ссылок мы будем неоднократно возвращаться в последующих разделах.

Все данные (переменные, константы и др.) хранятся в памяти. Память представляет собой непрерывную последовательность ячеек (байтов), каждая из которых имеет свой номер – адрес:

                                       
                                       
                                     
                                                                               

При определении, например, некоторой переменной, она располагается в памяти по определенному адресу и занимает столько ячеек, сколько требует тип этой переменной. Пусть, например, имеется переменные int A = 2351 и double B = 3.1 и пусть они располагаются в памяти так:

      А = 2351 B = 3.14          
                                       
                                     
                                                                               

Говорят, что переменная А располагается по адресу 101 и занимает 4 байта, а переменная B имеет адрес 105 и занимает 8 байт памяти.

Для получения адреса какого-либо программного объекта используется оператор &. Например, если выполнить фрагмент следующей программы (в предположении, что переменные A и B располагаются в памяти, как это показано на предыдущем рисунке):

int A = 2351;

double B = 3.14;

cout << “Значение переменной А: ” << A << endl;

cout << “Адрес переменной А: ” << &A << endl;

cout << “Значение переменной В: ” << В << endl;

cout << “Адрес переменной В: ” << &В << endl;

получим следующий результат:

Значение переменной А: 2351

Адрес переменной А: 101

Значение переменной В: 3.14

Адрес переменной В: 105

Правда, значения адресов переменных будут выведены в шестнадцатеричном формате.

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

Указатели определяются в программе следующим образом:

<тип данных> *<имя переменной>

Здесь < тип данных > определяет так называемый базовый тип указателя.

<Имя переменной> является идентификатором переменной-указателя.

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

Например:

int *p1;

double *p2;

Здесь определены две переменные-указатели (или просто – два указателя). Указатель p1 является переменной-указателем на базовый тип int (или, как говорят, переменная p1 указывает на int - значение), а указатель p2 указывает на double – значение.

Иными словами, переменная p1 предназначена для хранения адресов участков памяти, размер которых соответствует типу int (4 байта), а переменная p2 - для хранения адресов участков памяти, размер которых соответствует типу double (8 байт).

Формально указатели представляют собой обычные целые значения типа int и занимают в памяти 4 байта не зависимо от базового типа указателя. Значения указателей при их выводе на экран представляются как целые значения в шестнадцатеричном формате.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: