1. 포인터 사용하기
페이지 정보
작성자 관리자 댓글 0건 조회 3,205회 작성일 19-03-13 08:20본문
Go 언어는 메모리 주소를 표현하는 포인터를 지원한다.
var 변수명 *자료형
package main
import "fmt"
func main() {
var numPtr *int // 포인터형 변수를 선언하면 nil로 초기화됨
fmt.Println(numPtr) // nil
}
C언어와 달리 *를 자료형 앞에 붙인다. 그리고 포인터형 변수를 선언하면 nil로 초기화 된다.
Go 언어는 nil로 사용한다.
C언어에서 NULL이 정수 0으로 정의되어 있지만 Go언어에서 nil은 숫자 0이 아니다.
포인터변수 = new(자료형)
package main
import "fmt"
func main() {
var numPtr *int = new(int)
fmt.Println(numPtr) // 0xc000064080: 메모리 주소. 시스템 마다, 실행할 때마다 달라짐
}
포인터형 변수에 값을 대입하거나, 가져오려면 역참조(dereference)를 사용한다.
*포인터_변수명
package main
import "fmt"
func main() {
var numPtr *int = new(int) // new 함수로 공간 할당
*numPtr = 1 // 역참조로 포인터형 변수에 값을 대입
fmt.Println(*numPtr) // 1: 포인터형 변수에서 값을 가져오기
}
일반변수에 참조(레퍼런스)를 사용하면 포인터형 변수에 대입할 수 있다.
&변수명
package main
import "fmt"
func main() {
var num int = 1
var numPtr *int = &num // 참조로 num 변수의 메모리 주소를 구하여
// numPtr 포인터 변수에 대입
fmt.Println(numPtr) // 0xc000064080: numPtr 포인터 변수에 저장된 메모리 주소
fmt.Println(&num) // 0xc000064080: 참조로 num 변수의 메모리 주소를 구함
}
함수에서 포인터형 매개변수 사용하기
package main
import "fmt"
func hello(n *int) {
*n = 2 // 포인터 변수 n를 역참조하여 메모리에 2를 대입
}
func main() {
var n int = 1
hello(&n) // 1이 들어있는 변수 n의 메모리 주소를 hello 함수에 넘김
fmt.Println(n) // 2: hello 함수에서 n의 메모리 공간에 2를 대입했으므로 바깥에 있는 n의 값이 바뀌었음
}
댓글목록
등록된 댓글이 없습니다.