주소 연산자
T
타입의 피연산자 x
에 대해, 주소 연산 &x
는 x
에 대한 포인터 타입 *T
를 생성한다. 이때 피연산자는 변수, 포인터 간접참조, 슬라이스의 인덱싱 연산, 주소로 지정할 수 있는 구조체 피연산자의 필드 선택자, 주소로 지정 가능한 배열의 인덱싱 연산 등과 같이 주소로 지정할 수 있는 것 이어야 한다. x
가 (괄호와 함께 사용될 수도 있는) 합성 리터럴일 때는 주소 지정 가능 조건이 적용되지 않는다. x
에 대한 평가가 런타임 패닉을 일으킨다면 &x
의 평가 역시 같은 결과를 낳는다.
포인터 타입 *T
의 피연산자 x
에 대해, 포인터 간접 참조 *x
는 x
가 가리키는 T
타입의 [변수] (/Variables/)를 나타낸다. x
가 nil
이면, *x
평가시 런타임 패닉이 발생할 것이다.
&x
&a[f(2)]
&Point{2, 3}
*p
*pf(x)
var x *int = nil
*x // 런타임 패닉 발생
&*x // 런타임 패닉 발생