Variable parameter

From Lazarus wiki
Revision as of 15:34, 29 October 2020 by Kai Burghardt (talk | contribs) (→‎top: rephrase introduction [cf. discussion])
Jump to navigationJump to search

English (en) español (es) suomi (fi)

A variable parameter is a routine parameter that is a variable. Calling a routine with a variable parameter requires to specify a variable at the proper position. The variable will (temporarily) be in the scope of the routine through the parameter’s name.


A variable parameter is declared by preceding a formal parameter declaration with the keyword var.

procedure xorSwap(var left, right: integer);
	left := left xor right;
	right := left xor right;
	left := left xor right;

Variable parameters can serve as both input and output, meaning it can be used for passing a value to a routine, and get a value from it. After procedure xorSwap has been called the variables at the call site will have changed. Assignments to variable parameters have an effect in the scope where the routine is called. Thus, a variable parameter can be considered as an alias for the actual argument given by the calling routine. When a routine changes the value of a variable parameter, it is actually changing the variable in the code that called the routine.

Since a variable parameter may appear on the left hand side of an assignment, only variables may be supplied as argument when calling the routine, never constants or expressions.


The specific implementation of variable parameters is only of concern for those who are programming (pure) assembler routines.

In FPC, variable parameters are implemented by passing a reference to the variable at the call site (call by reference). For this reason, variable parameters are also referred to as reference parameters. If a routine is inlined, the extra level of indirection is eliminated.

See also