: 값의 메모리 주소를 저장하는 변수
C와 C++에서는 포인터로 포인터 연산을 통해 메모리 주소를 직접 제어할 수 있다.
하지만 go에서는 포인터 변수를 제공은 하지만 연산까지는 허용하지 않고
단순히 특정 변수나 특정 오브젝트를 주소값으로 참조할 수 있는 주소값 형태의 포인터 변수를 제공한다.
자바, 파이썬, C# 같은 언어에서는 포인터를 사용하지 않고 객체를 참조하는 방식으로 메모리에 간접 접근한다.
하지만 직접적으로 포인터 변수를 제공하지 않을 뿐이지 실제로는 언어에서 포인터를 이용하여 자동으로 관리하고있다.
포인터 라고 부른다.역참조 또는 간접참조 라고 부른다.import "fmt"
func main() {
// &는 실제 값의 주소값
i := 10
p := &i
// *은 주소값이 가리키는 값
fmt.Println(i) // 10
fmt.Println(p) // 0xc0000b4010
fmt.Println(*p) // 10
// p가 지닌건 주소값이지만 p에서 값을 변경하게되면 i도 바뀐다
// p가 주소값을 통해 참조하고있는 값 i가 바뀌게된다
*p = 12
fmt.Println(*p) // 12
fmt.Println(i) // 12
}
함수를 호출할 때는 주소값 전달을 위해 "함수명(&변수명)"을 입력한다
함수에서 매개변수명을 입력할 때 값을 참조하기 위해*을 매개변수형 앞에 붙인다
함수안에서 모든 매개변수 앞에*를 붙여야한다.