File: Call-by-Value.html

package info (click to toggle)
octave 7.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 130,464 kB
  • sloc: cpp: 332,823; ansic: 71,320; fortran: 20,963; objc: 8,562; sh: 8,115; yacc: 4,882; lex: 4,438; perl: 1,554; java: 1,366; awk: 1,257; makefile: 652; xml: 173
file content (115 lines) | stat: -rw-r--r-- 4,750 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 6.8, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Call by Value (GNU Octave (version 7.3.0))</title>

<meta name="description" content="Call by Value (GNU Octave (version 7.3.0))">
<meta name="keywords" content="Call by Value (GNU Octave (version 7.3.0))">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">

<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Calling-Functions.html" rel="up" title="Calling Functions">
<link href="Recursion.html" rel="next" title="Recursion">
<style type="text/css">
<!--
a.copiable-anchor {visibility: hidden; text-decoration: none; line-height: 0em}
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
span:hover a.copiable-anchor {visibility: visible}
ul.no-bullet {list-style: none}
-->
</style>
<link rel="stylesheet" type="text/css" href="octave.css">


</head>

<body lang="en">
<div class="subsection" id="Call-by-Value">
<div class="header">
<p>
Next: <a href="Recursion.html" accesskey="n" rel="next">Recursion</a>, Up: <a href="Calling-Functions.html" accesskey="u" rel="up">Calling Functions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<span id="Call-by-Value-1"></span><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
</p>
<div class="example">
<pre class="example">function f (x, n)
  while (n-- &gt; 0)
    disp (x);
  endwhile
endfunction
</pre></div>

<p>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>
<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
</p>
<div class="example">
<pre class="example">foo = &quot;bar&quot;;
fcn (foo)
</pre></div>

<p>you should not think of the argument as being &ldquo;the variable
<code>foo</code>.&rdquo;  Instead, think of the argument as the string value,
<code>&quot;bar&quot;</code>.
</p>
<p>Even though Octave uses pass-by-value semantics for function arguments,
values are not copied unnecessarily.  For example,
</p>
<div class="example">
<pre class="example">x = rand (1000);
f (x);
</pre></div>

<p>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.
</p>
</div>
<hr>
<div class="header">
<p>
Next: <a href="Recursion.html">Recursion</a>, Up: <a href="Calling-Functions.html">Calling Functions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>