## Description

The unary (**&**) operator returns the address of its operand.
If the operand has type "*type*", the result has type "pointer to
*type*".
If the operand is the result of a unary ***** operator, neither that operator
nor the **&** operator is evaluated and the result is as if both were omitted,
except that the constraints on the operators still apply and the result is
not an l-value.
Similarly, if the operand is the result of a **[]** operator, neither the **&**
operator nor the unary ***** that is implied by the **[]** is evaluated and the
result is as if the **&** operator were removed and the **[]** operator were
changed to a **+** operator.
Otherwise, the result is a pointer to the object designated by its
operand^{23}.

[23] Thus, **&*E** is equivalent to **E** (even if **E** is a null pointer), and
**&(E1[E2])** is equivalent to **((E1) + (E2))**.
It is always true that if **E** is an l-value that is a valid operand of the
unary **&** operator, ***&E** is an l-value equal to **E**.

## See Also

## Document Notes

For more information, see the OpenCL C Specification

This page is extracted from the OpenCL C Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.