<html lang="en"> <head> <title>Call by Value - Untitled</title> <meta http-equiv="Content-Type" content="text/html"> <meta name="description" content="Untitled"> <meta name="generator" content="makeinfo 4.13"> <link title="Top" rel="start" href="index.html#Top"> <link rel="up" href="Calling-Functions.html#Calling-Functions" title="Calling Functions"> <link rel="next" href="Recursion.html#Recursion" title="Recursion"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"><!-- pre.display { font-family:inherit } pre.format { font-family:inherit } pre.smalldisplay { font-family:inherit; font-size:smaller } pre.smallformat { font-family:inherit; font-size:smaller } pre.smallexample { font-size:smaller } pre.smalllisp { font-size:smaller } span.sc { font-variant:small-caps } span.roman { font-family:serif; font-weight:normal; } span.sansserif { font-family:sans-serif; font-weight:normal; } --></style> </head> <body> <div class="node"> <a name="Call-by-Value"></a> <p> Next: <a rel="next" accesskey="n" href="Recursion.html#Recursion">Recursion</a>, Up: <a rel="up" accesskey="u" href="Calling-Functions.html#Calling-Functions">Calling Functions</a> <hr> </div> <h4 class="subsection">8.2.1 Call by Value</h4> <p>In Octave, unlike Fortran, function arguments are passed by value, which means that each argument in a function call is evaluated and assigned to a temporary location in memory before being passed to the function. There is currently no way to specify that a function parameter should be passed by reference instead of by value. This means that it is impossible to directly alter the value of a function parameter in the calling function. It can only change the local copy within the function body. For example, the function <pre class="example"> function f (x, n) while (n-- > 0) disp (x); endwhile endfunction </pre> <p class="noindent">displays the value of the first argument <var>n</var> times. In this function, the variable <var>n</var> is used as a temporary variable without having to worry that its value might also change in the calling function. Call by value is also useful because it is always possible to pass constants for any function parameter without first having to determine that the function will not attempt to modify the parameter. <p>The caller may use a variable as the expression for the argument, but the called function does not know this: it only knows what value the argument had. For example, given a function called as <pre class="example"> foo = "bar"; fcn (foo) </pre> <p class="noindent">you should not think of the argument as being “the variable <code>foo</code>.” Instead, think of the argument as the string value, <code>"bar"</code>. <p>Even though Octave uses pass-by-value semantics for function arguments, values are not copied unnecessarily. For example, <pre class="example"> x = rand (1000); f (x); </pre> <p class="noindent">does not actually force two 1000 by 1000 element matrices to exist <em>unless</em> the function <code>f</code> modifies the value of its argument. Then Octave must create a copy to avoid changing the value outside the scope of the function <code>f</code>, or attempting (and probably failing!) to modify the value of a constant or the value of a temporary result. </body></html>