(Go : basic) 10. pointer

Posted by : at

Category : Go


package main

import "fmt"

func main() {
	//포인터
	//Go : 포인터 지원(C, C++)
	//포인터지원 X(파이썬, C#, JAVA 등)
	//주소의 값은 직접 변경 불가능(잘못된 코딩으로 인한 버그 방지)
	//메모리 주소를 출력(값의 메모리 주소)
	//애스터리스크로 사용(*)
	//nil로 초기화(0 아님)

	//예제1
	var a *int            //방법1
	var b *int = new(int) //방법2

	fmt.Println(a) //nil
	fmt.Println(b) //nil

	i := 7
	a = &i //& 주소값 전달
	b = &i

	var c = &i //방법3
	d := &i    //방법4

	fmt.Println("ex1 : ", i)
	fmt.Println("ex1 : ", &i) //실행 할 때 마다 시스템 별로 변경

	fmt.Println("ex1 : ", *a)
	fmt.Println("ex1 : ", a)
	fmt.Println("ex1 : ", &a) //포인터 변수 a의 주소 값

	fmt.Println("ex1 : ", *b)
	fmt.Println("ex1 : ", b)
	fmt.Println("ex1 : ", &b) //포인터 변수 b의 주소 값

	fmt.Println("ex1 : ", *c)
	fmt.Println("ex1 : ", c)
	fmt.Println("ex1 : ", &c) //포인터 변수 c의 주소 값

	fmt.Println("ex1 : ", *d)
	fmt.Println("ex1 : ", d)
	fmt.Println("ex1 : ", &d) //포인터 변수 d의 주소 값
}
package main

import "fmt"

func main() {

	//예제1
	type bag struct{ witdh, height, weight float32 } //구조체
	var p *int = new(int)
	var p_bag *bag = &bag{20, 50, 30}

	fmt.Println("ex1 : ", p)
	fmt.Println("ex1 : ", p_bag)
	fmt.Println()

	//p++              //컴파일 에러, 포인터 연산 허용 X
	//p = 0xc071405232 ////컴파일 에러, 주소값 대입 허용 X

	//예제2
	i := 7
	p = &i

	fmt.Println("ex2 : ", i, *p, &i, p)

	*p++ //1 증가
	fmt.Println("ex2 : ", i, *p, &i, p)

	*p = 10 //포인터 변수 역 참조 값 변경
	fmt.Println("ex2 : ", i, *p, &i, p)

	i = 77 //원본 변수 값 변경
	fmt.Println("ex2 : ", i, *p, &i, p)
}
package main

import "fmt"

func rptc(n *int) {
	*n = 77
}

func vptc(n int) {
	n = 77
}

func main() {
	//포인터 값 전달
	//함수, 메서드 호출 시에 매개변수 값을 복사 전달 -> 함수, 메서드 내에서는 원본 값 변경 불가능
	//원본 값 변경 위해서 포인터 전달 가능
	//특히 크기가 큰 배열인 경우 값 복사시에 시스템 부담 -> 포인터 전달로 해결 But (슬라이스는 참조 전달)

	//예제1
	var a int = 10
	var b int = 10
	fmt.Println("ex1 : ", a)
	fmt.Println("ex1 : ", b)
	fmt.Println()

	rptc(&a)
	vptc(b)
	//vptc(&b) //에러 발생

	fmt.Println("ex1 : ", a)
	fmt.Println("ex1 : ", b)
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links