200 likes | 393 Views
5.3 Sub Procedures, Part II. Passing by Value Passing by Reference Sub Procedures that Return a Single Value Debugging. ByVal and ByRef . Parameters in Sub procedure headers are proceeded by ByVal or ByRef ByVal stands for By Value ByRef stands for By Reference. Passing by Value .
E N D
5.3 Sub Procedures, Part II • Passing by Value • Passing by Reference • Sub Procedures that Return a Single Value • Debugging
ByVal and ByRef • Parameters in Sub procedure headers are proceeded by ByVal or ByRef • ByVal stands for By Value • ByRef stands for By Reference
Passing by Value • When a variable argument is passed to a ByVal parameter, a copy of the value of the argument is passed. • After the Sub procedure terminates, the original value of the actual parameter that was passed is unchanged, even if the procedure changes the formal parameter value.
Passing by Reference • When a variable argument is passed to a ByRef parameter, the actual parameter (argument) and the formal parameter are one and the same…they are the same location in memory. • After the Sub procedure terminates, the original value of the actual parameter that was passed will be changed when the formal parameter is changed.
Example 5.3.1 Sub procedure has a ByVal parameter.
About to call. Note the value in variable amt, the actual parameter (argument).
In the called Sub procedure. Formal parameter num has a copy of actual parameter amt.
But the value in amt remains the same. This is because amt and val are two different memory locations.
Therefore, any change to a ByVal formal parameter has no effect on its associated actual parameter.
Example 5.3.1 (modified) Let’s try the Sub procedure with a ByRef parameter.
About to call. Note the value in variable amt, the actual parameter (argument).
In the called Sub procedure. Formal parameter num is identical to actual parameter amt.
Formal parameter num’s value has changed. Formal parameter num’s value has changed.
Since num is a ByRef parameter, the value in amt changes also. This is because amt and val are the same memory location.
Therefore, any change to a ByRef formal parameter remains in the associated actual parameter after the called procedure terminates.
Example 5.3.2 Sub (or Function) procedures with ByRef parameters can be used to “return” values. If you want a procedure to “return” more than one value, you can use ByRef parameters for this.
Example 5.3.3 If you want to swap the values in two variables, you need to have a temporary variable.