In mathematics, the domain of a function is the set of all input values to the function.
Given a functionf : A → B, the setA is called the domain, or domain of definition of f.
The set of all values in the codomain that f maps to is called the range of f, written f(A).
A well-defined function must map every element of the domain to an element of its codomain. For example, the function f defined by
f(x) = 1/x
has no value for f(0). Thus, the set R of real numbers cannot be its domain. In cases like this, the function is usually either defined on R {0}, or the "gap" is plugged by specifically defining f(0). If we extend the definition of f to
f(x) = 1/x, for x ≠ 0
f(0) = 0,
then f is defined for all real numbers and we can choose its domain to be R.
Any function can be restricted to a subset of its domain. The restriction of g : A → B to S, where S ⊆ A, is written g |S : S → B.
Restricted pointers are also very useful as pointer parameters of a function.
Conversely, an older restricted pointer can be assigned a value based on a newer restricted pointer only after execution of the block associated with the newer restricted pointer has ended.
This allows, for example, a function to return the value of a restricted pointer that is local to the function, and the return value then to be assigned to another restricted pointer.
It allows restricted pointers to be modifiable, to be members of structures and elements of arrays, and to be ``strongly scoped,'' in the sense that a restricted pointer declared in a nested block makes a non-aliasing assertion only within that block.
In Figure 8, the original restricted pointer parameter is represented by a block scope restricted pointer.
This allows, for example, a function with a restricted pointer parameter to be called with an argument that is a restricted pointer.