Читайте также: |
|
Указатели могут вести себя как динамические псевдонимы для массивов и секций массивов. Такие указатели называют указателями массива. Указатели массива можно использовать, когда секция ссылается часто и может сохранять копию данных. Например:
REAL, TARGET:: grid(10,10) REAL, POINTER:: centre(:,:), row(:)... centre => grid(4:7,4:7)row => grid(9,:)
Указатель массива может быть связан со всем массивом или выбранной частью. Размер и протяженность массива можно изменить так, как требуется даже с рапределяемыми массивами. Например:
centre => grid(5:5,5:6)! внутренние 4 элемента от прежней серединыЗаметим, что указатель массива не нужно возвращать прежде чем переопределены его протяженность или границы.
INTEGER, TARGET:: list(-5:5) INTEGER, POINTER:: pt(:) INTEGER, DIMENSION(3):: v = (/-1,4,-2/)... pt => list! указывает границы для pt pt => list(:)! указывает границы для pt pt => list(1:5:2)pt => list(v)! неверно
Протяженность (или границы) секции массива определяются типом присваивания, использованным для присваивания указателя. Когда указатель массива определяется массивом, соответствующий указатель массива принимает вид его расширения к массиву-адресату как это было выше с pt => list, оба имеют границы -5:5. Если указатель массива связывается с секцией массива (даже если секция равна всему массив у), его меньшая граница в каждом измерении равна 1 - как с pt => list(:) выше, протяженость pt равна 1:11, тогда как протяженность для list равна -5:5. Так pt(1) привязан к list(-5), pt(2) к list(-4), и т.д.
Возможно связать указатель массива с секцией массива, определенной с помощью тройки выписки. Невозможно связать один с секцией массива, определенной выпиской вектора, выше v. Присваивание уазателя pt => list(1:5:2) верно с pt(1), связанным с list(1), pt(2), связанным с list(3) и pt(3)), связанным с list(5).
Я
Дата добавления: 2015-11-14; просмотров: 65 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Присваивание указателя | | | В разделе приведены примеры и результаты их запуска на Alfa |