Difference between revisions of "Call by reference"
Karl Jones (Talk | contribs) |
Karl Jones (Talk | contribs) |
||
(One intermediate revision by the same user not shown) | |||
Line 20: | Line 20: | ||
* [[Beta normal form]] | * [[Beta normal form]] | ||
+ | * [[Call by value]] | ||
* [[Comparison of programming languages]] | * [[Comparison of programming languages]] | ||
* [[Eval()]] | * [[Eval()]] |
Latest revision as of 16:30, 24 September 2016
In computer programming, call by reference (also referred to as pass by reference) is an evaluation strategy where a function receives an implicit reference to a variable used as argument
By contrast, in the call by value strategy, the function receives a copy of the value, not a reference.
Description
This typically means that the function can modify (i.e. assign to) the variable used as argument—something that will be seen by its caller. Call by reference can therefore be used to provide an additional channel of communication between the called function and the calling function.
A call-by-reference language makes it more difficult for a programmer to track the effects of a function call, and may introduce subtle software defects.
Many languages support call by reference in some form or another, but comparatively few use it as a default. FORTRAN II is an early example of a call-by-reference language. A few languages, such as C++, PHP, Visual Basic .NET, C# and REALbasic, default to call by value, but offer special syntax for call-by-reference parameters. C++ additionally offers call by reference to const.
Call by reference can be simulated in languages that use call by value and don't exactly support call by reference, by making use of references (objects that refer to other objects), such as pointers (objects representing the memory addresses of other objects). Languages such as C and ML use this technique. It is not a separate evaluation strategy—the language calls by value—but sometimes it is referred to as call by address (also referred to as pass by address). In an unsafe language like C this may cause memory safety errors such as null pointer dereferences, and also may be confusing. In ML references are type- and memory- safe.
Similar effect is achieved by call by sharing (passing an object, which can then be mutated), used in languages like Java, Python, and Ruby.
In purely functional languages there is typically no semantic difference between the two strategies (since their data structures are immutable, so there is no possibility for a function to modify any of its arguments), so they are typically described as call by value even though implementations frequently use call by reference internally for the efficiency benefits.
See also
- Beta normal form
- Call by value
- Comparison of programming languages
- Eval()
- Evaluation strategy
- Lambda calculus
- Parameter (computer programming)
- Variable (computer science)
External links
- Evaluation strategy @ Wikipedia