가장 빨리 만나는 Go 언어 Unit 28.1 함수에서 포인터형 매개변수 사용하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

포인터 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

함수에서 포인터형 매개변수 사용하기

지금까지 함수의 매개변수에 값을 넘겨줄 때 일반 자료형을 사용했습니다. 다음은 함수에 정수형 값을 넘기고, 함수 안에서는 매개변수에 다른 값을 대입합니다.

func hello(n int) {
	n = 2 // 매개변수 n에 2를 대입
}

func main() {
	var n int = 1

	hello(n) // 1이 들어있는 변수 n을 hello 함수에 넘김

	fmt.Println(n) // 1: hello 함수안의 n에 2를 대입했지만 바깥의 n은 영향이 없음
}
실행 결과
1

매개 변수에서 일반 자료형을 사용하면 값이 복사되므로 함수 안에서 값을 변경해도 함수 바깥의 변수는 영향이 없습니다.

이번에는 포인터형 매개변수를 사용해보겠습니다.

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의 값이 바뀌었음
}
실행 결과
2

hello 함수에서 포인터형 매개변수를 받은 뒤 *를 사용하여 값을 2로 변경하였습니다. 이렇게 하면 함수 바깥의 n의 값도 2가 됩니다. 즉, 메모리 주소를 넘겨주었으므로 기존 변수의 값이 바뀌게 됩니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2015-06-01