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 operand23.
 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.
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 (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.