Читайте также: |
|
Здесь два оператора, которые должны действовать на указатели:
Чтобы связать указатель с адресатом используют оператор присваивания указателя (=>):
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 |