请教,Fortran指针数组的问题
想实现用一个指针数组指向自定义类型的某个属性,然后进行其他操作,但是用下面的案例有个错误。test.f90:30:2:
ages(i) => persons(i)%age
1
Error: Expected bounds specification for 'ages' at (1)
再线求助
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
本帖最后由 Transpose 于 2024-12-8 20:32 编辑
allocate了age再=>就内存泄漏了
另外Fortran的数组指针只能指向数组或者数组切片
ages=>persons(:)%age
不知道这么写符合标准不,倒是没报错
本帖最后由 楚香饭 于 2024-12-9 09:00 编辑
integer, pointer :: ages(:)
这是一个指向数组的指针。而不是一个由指针构成的数组。
Fortran 不能直接构建“由指针构成的数组”,非要实现需要用一个
type T_name
real , pointer :: p
end type
type(T_name) :: pnt(:)
来实现指针数组。
指向数组的指针,如果分配的话,和 allocatable 的数组用法类似。
分配后即指向该数组,如果你再 => 指向新的目标,那么已分配的内容就“泄露”了,没有释放且不能再访问。
指向数组的指针,可以直接指向一个数组,而无需分配。
如楼上所说的,合法的途径是直接 ages=>persons(:)%age
页:
[1]