Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_по_пяву_4.doc
Скачиваний:
134
Добавлен:
15.03.2015
Размер:
1.29 Mб
Скачать
    1. Размещение массивов в оперативной памяти

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

  1. Указатели

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

Целесообразно различать типизированные и нетипизированные указатели. Значением типизированного указателя может быть адрес объекта только определенного типа. Значением нетипизированного указателя может быть объект любого типа.

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

А) Для типизированных указателей

T*T

Указатель Объект

Б) Для нетипизированных указателей

void*T

Указатель Объект

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

Для дальнейшего необходимо рассмотреть два оператора: разыменования и взятия адреса.

    1. Операторы разыменования и взятия адреса

Это два основных оператора при работе с указателями. В результате выполнения оператора разыменования возвращается тот объект, на который установлен указатель. Основным оператором разыменования является префиксный унарный оператор “*”. Пусть в программе объявлен типизированный указатель p. Тогда, образовав выражение *p, получим доступ к тому объекту, адрес которого содержится в указателеp. Выражение *pотносится к категорииlvalue. Такое выражение может использоваться как в левой, так и в правой части оператора присваивания. ЕслиT- тип объекта, на который может быть установлен указателяp, относится к категории арифметических типов, то допустима инструкция присваивания следующего вида:

*p= 10;

Оператор взятия адреса является унарным префиксным оператором, позволяющим получить адрес своего операнда. Использование оператора взятия адреса приводит к образованию указателя-выражения. Приведем пример. Пусть в программе объявлены переменная nтипаintи типизированный указательptr, значением которого могут быть адреса объектов типаint. Тогда с помощью следующей инструкции можно инициализировать указательptr:

ptr= &n;

Приведенная выше инструкция присваивания записывает в указатель-переменную ptrзначение указателя-выражения &n.