An Example: pass-by-value-result vs. pass-by-reference
10/20/16
An Example: pass-by-value-result vs. pass-by-reference
program foo;
var x: int;
procedure p(y: int);
begin
y := y + 1;
y := y * x;
end
begin
x := 2;
(entry
to
p)
p(x);
(a5er
y:=
y
+
1)
print(x); end
(at
p's
return)
pass--by--value--result
x
y
2
2
2
3
6
6
pass--by--reference
x
y
2
2
3
3
9
9
N.
Meng,
S.
Arthur
1
Aliases can be created due to passby-reference
? Given void fun(int &first, int &second),
? Actual parameter collisions
? E.g., fun(total, total) makes first and second to be aliases
? Array element collisions
? E.g., fun(list[i], list[j]) can cause first and second to be aliases if i == j
? Collisions between formals and globals
? E.g., int* global;
void main() { ... sub(global); ... } void sub(int* param) { ... }
? Inside sub, param and global are aliases
N.
Meng,
S.
Arthur
2
1
10/20/16
Pass-by-Name
? Implement an inout-mode parameter transition method
? The body of a function is interpreted at call time after textually substituting the actual parameters into the function body
? The evaluation method is similar to C preprocessor macros
N.
Meng,
S.
Arthur
3
An Example in Algol
procedure double(x); real x;
begin x := x * 2;
end; Therefore, double(C[j]) is interpreted as C[j] = C[j] * 2
N.
Meng,
S.
Arthur
4
2
10/20/16
Another Example
? Assume k is a global variable,
procedure sub2(x: int; y: int; z: int); begin
k := 1; y := x; k := 5; z := x; end;
? How is the function call sub2(k+1, j, i) interpreted?
N.
Meng,
S.
Arthur
5
Disadvantages of Pass-by-Name
? Very inefficient references ? Too tricky; hard to read and understand
N.
Meng,
S.
Arthur
6
3
10/20/16
Implementing Parameter-Passing Methods
? Most languages use the runtime stack to pass parameters
? Pass-by-value
? Values are copied into stack locations
? Pass-by-result
? Values assigned to the actual parameters are placed in the stack
? Pass-by-value-result
? A combination of pass-by-value and pass-by-result
? Pass-by-reference
? Parameter addresses are put in the stack
N.
Meng,
S.
Arthur
7
An Example
? Function header: void sub (int a, int b, int c, int d)
? a: pass by value ? b: pass by result ? c: pass by value-result ? d: pass by reference
? Function call: main() calls sub(w, x, y, z)
N.
Meng,
S.
Arthur
8
4
10/20/16
N.
Meng,
S.
Arthur
9
Design Considerations for Parameter Passing
? Efficiency ? Whether one-way or two-way data
transfer is needed
N.
Meng,
S.
Arthur
10
5
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related download
- interpreting urinalysis and urine culture results
- a comparative analysis regarding the
- an example pass by value result vs pass by reference
- 11 05 2021 09 00am judge judge james turner 75cc1
- ut clauses of purpose result and indirect command
- results oriented and relevant examples
- lecture 11 results and post processing
- run rate gp 9
- m21 1mr 1 g improved pension deductible expenses
- solutions to text problems suny geneseo
Related searches
- an example of an investing activity is
- an example of an opportunity cost
- example of future value problem
- what is an example of an element
- an example of an annotated bibliography
- example of an example paragraph
- pass html value to javascript
- example of an example essay
- is python pass by reference
- python pass by object reference
- python pass by value
- as the result vs as a result