本帖最后由 chuxf 于 2014-2-21 17:36 编辑
Fortran 里只有数组指针,指针数组可以像 8 楼的代码那样。
你的程序里 p1 是数组指针。p1 是指针,不是数组,只不过它指向的目标是数组。
p1(i,j) 可以取出对应的变量值,但 p1 依然是指针,不是数组。
关于指针 p+1 ,实现是非常容易的。只是地址加上每元素占用的字节数既可。但是 Fortran 语法不允许,目的是防止指针指向数组范围之外。
Fortran 指向数组的指针(数组指针),不单单是数组的首地址,而且包含数组的维度和上下限,因此,更可有效防范指针指向数组范围之外。
从编译器实现上看,Fortran的指针是受约束的,实现起来更难(换句话说,写一个支持指针的 Fortran 编译器,比写一个支持指针的 C 编译器难得多)。受约束会影响灵活性,但可增加数据安全。
这就好像 Discuz 论坛(咱们论坛使用的程序)一样,它使用了大量的代码来限制普通会员的 HTML 使用,比如会员发帖时输入 <iframe src="某恶意网址">,论坛程序会对这段代码进行改动,使得它并不会被浏览器当做插入页面来解释,所以在论坛发帖的时候你做不出漂亮的网页效果。但是,对论坛来说更安全。
最后,指向普通变量的指针,不能直接指向一个数组,但可以指向数组的某个元素,或者 type 派生类型的某一个普通变量成员。
[Fortran] 纯文本查看 复制代码 real ,pointer :: p
real , target :: a( 10 )
integer :: i
Do i = 1 , 10
p => a(i)
End Do
|