Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Присваивание указателя

Спецификация входных-выходных параметров | Использование модуля | Внутренние процедуры | Связь с хозяином (Host) - глобальные данные | Объекты допустимого образа | Процедуры в качестве параметров | Родовые подпрограммы | Вещественные - форма с фиксированной точкой | Ввод-вывод без продвижения | Оператор OPEN |


Читайте также:
  1. Базовая структура унифицированного указателя ресурса
  2. Понятие автоматического указателя (auto_ptr)

Здесь два оператора, которые должны действовать на указатели:

Чтобы связать указатель с адресатом используют оператор присваивания указателя (=>):

pointer => target

Где pointer есть переменная указателя и target любой правильный адресат. Теперь pointer должна быть использована в качестве вымышленного имени данного, хранимого адресатом target. Итак оператор присваивания указателя выделяет память, требуемую указателем.

Чтобы заменить значение адресата указателя (подобно значению переменной) используют обычный оператор присваивания (=). Как присваивание других переменных с указателем, используемых в качестве вымышленного имени другой переменной..

Ниже примеры оператора присваивания:

INTEGER, POINTER:: pt INTEGER, TARGET:: x=34, y=0... pt => x! pt указывает на x y = pt! y эквивалентно x pt => y! pt указывает y pt = 17! y эквивалентно 17

Эти операторы объявления специфицируют три переменных: pt указатель целого; x и y допустимые адресаты указателя. Первый выполняемый оператор связывает адресат х с pt. Второй выполняемый оператор заменяет значение переменной y на значение адресата указателя pt - только оно будет выделено, когда pt свяжется с адресатом. Третий выполняемый оператор меняет связь указателя с другим адресатом. Наконец, четвертый выполняемый оператор связывает новое значение 17 с адресатом pt (но не с самим pt!). Результат вышеприведенных операторов иллюстрируется ниже:

 

Возможно связать адресат с указателем, используя другой указатель. Например:

REAL, POINTER:: pt1, pt2... pt2 => pt1! верно только если pt1 имеет связанный адресат

Не смотря на это может появиться указатель, указывающий на другой указатель, pt2 не указывающий на pt1 самого, но на адресат указателя pt1. Неправильно думать об 'оковах указателя', одного указателя на другой. Вместо этого все такие указатели связываются с одним и тем же адресатом.

Остерегайтесь использования следующих операторов, они оба верны:

pt1 => 17! константное выражение - не верный адресат pt2 => pt1 + 3! арифметическое выражение - не верный адресат

Я

Разыменование (Dereferencing)

Когда указатель использован как вымышленное имя для переменной, он автоматически разыменовывается и значение адресата используется быстрее чем сам указатель. Для того, чтобы разыменовать указатель эти способом, требуется, чтобы он был связан с адресатом.

Указатель автоматически разыменовывается, когда он появляется:

Например:

pt => a b = pt! b устанавливается равным значению a - pt разыменовано IF(pt<0) pt=0! pt разыменовано всегда WRITE(6,*) pt! адресат указателя pt записан

READ(5,*) pt! значение сохранено у адресата указателя pt

Я


Дата добавления: 2015-11-14; просмотров: 48 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Статус распределяемых массивов| Array Pointers

mybiblioteka.su - 2015-2024 год. (0.008 сек.)