Fortran Coder

查看: 106|回复: 2
打印 上一主题 下一主题

[指针] 请教,Fortran指针数组的问题

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
10 元
贡献
3 点
跳转到指定楼层
楼主
发表于 2024-12-8 16:46:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想实现用一个指针数组指向自定义类型的某个属性,然后进行其他操作,但是用下面的案例有个错误。
test.f90:30:2:

   ages(i) => persons(i)%age
  1
Error: Expected bounds specification for 'ages' at (1)
再线求助
[Fortran] 纯文本查看 复制代码

program pointer_to_attribute
    implicit none
	! 定义Person类型
	type :: Person
		integer :: age
		real :: height
		real :: weight
		character(len=20) :: name
	end type Person
   ! 声明Person类型的数组,包含5个元素
    type(Person) :: persons(5)
   ! 声明一个指针数组,用来指向persons数组中每个元素的age属性
    integer, pointer :: ages(:)
    integer :: i

   ! 初始化persons数组中的元素
    do i = 1, 5
        persons(i)%age = 20 + i
        persons(i)%height = 1.70 + real(i) / 10.0
        persons(i)%weight = 60.0 + real(i) * 2.0
        write(persons(i)%name, '(A, I1)') 'Person ', i
    end do

   ! 让指针数组ages指向persons数组中每个元素的age属性
    allocate(ages(5))
	
	do i=1,5
		ages(i) => persons(i)%age
	end do  

   ! 输出通过指针访问到的年龄信息,验证是否正确指向
    do i = 1, 5
        print *, 'Person ', i, ' age (via pointer): ', ages(i)
    end do

   ! 释放指针数组所占用的内存空间
    deallocate(ages)

end program pointer_to_attribute


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

168

帖子

2

主题

1

精华

大师

Vim

F 币
1021 元
贡献
486 点

规矩勋章

沙发
发表于 2024-12-8 20:27:21 | 只看该作者
本帖最后由 Transpose 于 2024-12-8 20:32 编辑

allocate了age再=>就内存泄漏了
另外Fortran的数组指针只能指向数组或者数组切片
[Fortran] 纯文本查看 复制代码
    ages=>persons(:)%age  

不知道这么写符合标准不,倒是没报错

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

板凳
发表于 2024-12-9 08:39:07 | 只看该作者
本帖最后由 楚香饭 于 2024-12-9 09:00 编辑

integer, pointer :: ages(:)
这是一个指向数组的指针。而不是一个由指针构成的数组。

Fortran 不能直接构建“由指针构成的数组”,非要实现需要用一个
[Fortran] 纯文本查看 复制代码
type T_name
  real , pointer :: p
end type
type(T_name) :: pnt(:)

来实现指针数组。

指向数组的指针,如果分配的话,和 allocatable 的数组用法类似。
分配后即指向该数组,如果你再 => 指向新的目标,那么已分配的内容就“泄露”了,没有释放且不能再访问。

指向数组的指针,可以直接指向一个数组,而无需分配。
如楼上所说的,合法的途径是直接 ages=>persons(:)%age  
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-22 01:05

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表