Byref (Parameters)

Declaration specifier to explicitly pass a parameter by reference

Syntax
   ByRef param As datatype

Usage
   [ Declare ] { Sub | Function } proc_name ( ByRef param As datatype  )

Description
   Passes a variable by reference, that is its address, to a subroutine or 
   function. When a variable is passed by reference, the contents of the 
   variable can be changed by the target subroutine or function.

   In -lang qb and -lang fblite dialects, ByRef is the default parameter 
   passing convention, unless Option ByVal is in effect.

   Opposite of ByVal.

   Note: A constant or a literal expression can also be passed to such a 
   procedure (which gets by reference), but they are obviously not 
   modifiable from the procedure body. In that case, the compiler passes by 
   reference a temporary variable initialized with the constant or the 
   literal expression.

   Warning: When passing by reference, it is recommended to pass an 
   argument of the same type (or fully compatible, like a derived type for 
   example) as that of the declared parameter. Although in some cases the 
   compiler accepts to pass a different type, often the result is not the 
   one expected.

Example
   Dim MyVar As Integer

   Sub ChangeVar(ByRef AVar As Integer)
      AVar = AVar + 1
   End Sub

   MyVar = 1
   Print "MyVar: "; MyVar 'output = 1
   ChangeVar MyVar
   Print "MyVar: "; MyVar 'output = 2
   Sleep
   End

Dialect Differences
   * In -lang fb dialect, ByVal is the default parameter passing 
     convention for all built-in types except String and user-defined Type 
     which are passed ByRef by default. The ZString and WString built-in 
     types are also passed ByRef by default, but passing ByVal is 
     forbidden. Arrays are always passed ByRef and the use of the specifier 
     ByRef or ByVal is forbidden.
   * In -lang qb and -lang fblite dialects, ByRef is the default parameter 
     passing convention.

Differences from QB
   * New to FreeBASIC

See also
   * Passing Arguments to Procedures
   * Declare
   * ByVal
   * Byref (Function Results)
   * Byref (Variables)

