Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [General] Указатель на адрес участка памяти


Автор: OlikFleur 10.2.2011, 23:35
Подскажите, пожалуйста, есть ли в Fortran указатель на адрес участка памяти? 

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

Автор: Фантом 11.2.2011, 01:26
Именно на участки памяти (в стиле, например, C) нет, но то, что Вам нужно, есть. Выглядит это примерно так:
Код

 real,dimension(:),pointer :: a                   ! Указатель на одномерный вещественный массив 
 real,dimension(0:1000),target :: a1,a2     !  Два одномерных вещественных массива, на которые можно ссылаться

 a => a1    ! Адрес a будет ссылаться на a1

 a(3)=a(2)+a(1)   ! После этого можно использовать a как "массив"

Из ограничений, которые могут показаться не совсем привычными, стоит отметить, что указатели в Фортране - это скорее "псевдонимы", арифметика указателей не поддерживается (поскольку компилятор имеет право ради оптимизации программы располагать "указуемые" данные в памяти произвольным образом). Указатель нельзя присваивать указателю - это будет воспринято как присваивание соответствующих данных (но можно написать a => b, где a и b - указатели, в этом случае a будет указывать на тот же объект, что и b, причем при дальнейшем пересвязывании b связанность a не поменяется, он будет указывать на старый объект). К тому же не стоит увлекаться атрибутом target без необходимости - это дает хотя и небольшие, но все же "накладные расходы".

Автор: OlikFleur 11.2.2011, 16:12
Большое спасибо, да, это именно то, что я искала!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)