在 Fortran 95 中按值传递参数
Passing arguments by value in Fortran 95
如何在调用函数时保留函数参数的值,而不创建新变量?这是,我怎样才能按值传递参数?
在此示例代码中:
program what
implicit none
integer :: a, b, c, d
a = 1
b = 2
c = 3
print *, a,b,c
d = f(val(a), val(b), val(c))
print *, d
print *, a,b,c
d = f(a, b, c)
print *, d
contains
function f(x,y,z) result(h)
integer:: x,y,z
integer :: h
h = x+y+z
x = 0
y = 0
z = 0
end function
end program
当我第二次调用该函数时,它只打印 0。
在 Fortran 95 中没有办法。除了一些非常不标准的扩展,但它们既不是 Fortran 95 也不是任何其他 Fortran,只是扩展。
在 Fortran 2003 中使用 value
属性。
function f(x,y,z) result(h)
integer, value :: x,y,z
该属性需要显式接口,但您的示例有它,所以没关系。
如何在调用函数时保留函数参数的值,而不创建新变量?这是,我怎样才能按值传递参数?
在此示例代码中:
program what
implicit none
integer :: a, b, c, d
a = 1
b = 2
c = 3
print *, a,b,c
d = f(val(a), val(b), val(c))
print *, d
print *, a,b,c
d = f(a, b, c)
print *, d
contains
function f(x,y,z) result(h)
integer:: x,y,z
integer :: h
h = x+y+z
x = 0
y = 0
z = 0
end function
end program
当我第二次调用该函数时,它只打印 0。
在 Fortran 95 中没有办法。除了一些非常不标准的扩展,但它们既不是 Fortran 95 也不是任何其他 Fortran,只是扩展。
在 Fortran 2003 中使用 value
属性。
function f(x,y,z) result(h)
integer, value :: x,y,z
该属性需要显式接口,但您的示例有它,所以没关系。