在Octave中,与Fortran不同,函数参数是按值传递的,这意味着函数调用中的每个参数在传递给函数之前都会被求值并赋值到内存中的一个临时位置。目前没有办法指定函数参数应该通过引用而不是通过值传递。这意味着无法直接更改调用函数中函数参数的值。它只能更改functionbody中的本地副本。例如,函数
函数f(x,n)while(n-->0)disp(x);endwhileend函数
显示第一个参数的值n时间。在该函数中,变量n用作临时变量,无需担心其值也可能在调用函数中发生更改。按值调用也很有用,因为总是可以为任何函数参数传递常量,而无需首先确定函数不会试图修改参数。
调用方可以使用变量作为参数的表达式,但被调用的函数不知道这一点:它只知道参数的值。例如,给定一个称为的函数
foo=“bar”;fcn(foo)
你不应该认为这个参数是“变量foo
。”相反,将参数视为字符串值,bar
.
即使Octave对函数参数使用了传递值语义,也不会不必要地复制值。例如
x=兰特(1000);f(x);
实际上并没有强迫两个1000乘1000的元素矩阵存在除非函数f
修改其参数的值。然后Octave必须创建一个副本,以避免在函数范围之外更改值f
,或试图(可能失败!)修改常量的值或一个随机结果的值。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号