在Fortran中,指針和引用是兩種不同的概念。指針是一種變量,它存儲了另一個變量的地址,可以通過該地址來訪問這個變量。引用是一種變量,它直接引用另一個變量的值,而不是存儲其地址。
指針的聲明和使用如下所示:
program pointer_example
implicit none
integer, target :: a
integer, pointer :: ptr
a = 10
ptr => a
print *, "Value of a: ", a
print *, "Value of ptr: ", ptr
print *, "Value pointed by ptr: ", ptr
end program pointer_example
在上面的示例中,ptr
是一個指針變量,它指向 a
變量的地址。通過 =>
操作符可以將 ptr
指向 a
。通過 ptr
可以訪問 a
的值。
引用的聲明和使用如下所示:
program reference_example
implicit none
integer :: a
integer, target :: b
integer, dimension(3) :: array
integer, dimension(3), target :: array_ptr
a = 10
b = 20
array = [1, 2, 3]
array_ptr = [4, 5, 6]
call assign(a, b)
print *, "Value of a after call: ", a
print *, "Value of b after call: ", b
call modify_array(array, array_ptr)
print *, "Value of array after call: ", array
print *, "Value of array_ptr after call: ", array_ptr
contains
subroutine assign(x, y)
integer, intent(out) :: x
integer, target, intent(in) :: y
x = y
end subroutine assign
subroutine modify_array(arr, arr_ptr)
integer, dimension(3), intent(inout) :: arr
integer, dimension(3), target, intent(in) :: arr_ptr
arr = arr_ptr
end subroutine modify_array
end program reference_example
在上面的示例中,assign
子例程使用引用機制將 y
的值賦給 x
。modify_array
子例程使用引用機制將 arr_ptr
的值賦給 arr
。通過引用機制可以直接操作變量的值,而不需要操作其地址。
總之,在Fortran中,可以通過指針來訪問變量的地址,通過引用來操作變量的值,這兩種機制可以方便地實現對變量的操作。