Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кр 1 вариант 5.doc
Скачиваний:
10
Добавлен:
01.04.2014
Размер:
259.58 Кб
Скачать

1Содержание

I . Теоретическая часть:

1. Операции над указателями.

2. Вложенные структуры и массивы структур

II . Практическая часть

III. Список использованных источников

Теоретическая часть.

  1. Операции над указателями.

Объявление указателя

Для всех переменных выделяются участки памяти размером, соответст-вующим типу переменной. Программист имеет возможность работать непо-средственно с адресами, для чего определен соответствующий тип данных – указатель. Указатель имеет следующий формат:

тип *имя указателя

Например:

int *a; double *b, *d; char *c;

Знак «звездочка» относится к имени указателя. Значение указателя соот-ветствует первому байту участка памяти, на который он ссылается. На один и тот же участок памяти может ссылаться любое число указателей.

В языке Си существует три вида указателей:

1. Указатель на объект известного типа. Содержит адрес объекта опреде-ленного типа.

2. Указатель типа void. Применяется, еcли тип объекта заранее не определен.

3. Указатель на функцию.

Операции над указателями

Над указателями можно провести две унитарные операции:

1. & (взять адрес). Указатель получает адрес переменной. Данная опера-ция применима к переменным, под которые выделен соответствующий участок памяти.

2. * (операция разадресации). Предназначена для доступа к величине, расположенной по данному адресу.

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

Указатели, как правило, используются при работе с динамической памя-тью (heap, или «куча»). Для работы с динамической памятью в языке Си опре-делены следующие функции: malloc, сalloc, realloc и free.

В языке C++ для выделения и освобождения памяти определены операции new и delete соответственно. Используют две формы операций:

1. Тип *указатель = new тип (значение) – выделение участка памяти в соответствии с указанным типом и занесение туда указанного значения.

delete указатель – освобождение выделенной памяти.

2. Тип *указатель = new тип[n] – выделение участка памяти размером n блоков указанного типа.

3. delete [ ]указатель – освобождение выделенной памяти.

Часто размер используемого при решении задачи массива не задан на момент компиляции программы, а определить его можно только при выполнении программы. В этом случае используется механизм, называемый динамическим распределением памяти. Для использования динамического распределения памяти необходимо создать переменную специального типа, называемую указателем, затем создать в памяти массив необходимого размера, доступ к которому будет осуществляться через этот указатель, наконец, освободить выделенную память после завершения работы с массивом.

Создание указателей

Указатель — это переменная специального типа. Она хранит не какое-то числовое значение, а адрес (номер первого байта в памяти компьютера), по которому хранится какая-то другая переменная. При создании указателя необходимо задать тип переменной, на которую он указывает. Синтаксис объявления указателя такой:

имя_типа * идентификатор;

Пример:

int * pi;

float * pf, f;

double * ps, * pt;

В первой строке этого примера объявлены переменная pi, являющейся указателем на тип int (то есть в ячейке памяти, на которую указывает pi должна хранится переменная типа int). Во второй строке объявлены переменная pf, являющейся указателем на тип float и переменная f типа float. Обратите особое внимание на эту строчку: для того, чтобы объявить несколько указателей в одной строке, необходимо перед идентификатором каждого из них поставить символ *. А еще лучше объявлять в одной строке только одну переменную. В третей строке объявляется два указателя на тип double: ps и pt.

Сразу после объявления значение указателя не определено, то есть он может указывать в произвольную ячейку памяти, поэтому пользоваться им нельзя. Иначе вы в лучшем случае получите ошибку segmentation fault, в худшем — программа будет работать непредсказуемо.

Соседние файлы в предмете Основы алгоритмизации и программирования