Doodly IT

[Go 묘공단 스터디] 포인터 본문

프로그래밍/Go

[Go 묘공단 스터디] 포인터

DoodlyKim 2023. 11. 15. 21:22

1) 포인터란?

 

포인터는 메모리 주소를 값으로 갖는 타입이다. 

 

2) 포인터 변수의 선언과 초기화

 

포인터 변수의 선언은 아래와 같이한다.

var p * int

 

포인터의 변수 초기화는 & 연산자로 진행한다.

 

package main

import "fmt"


func main() {

	arr := 20
	var p *int
	p = &arr

	fmt.Println(p) // arr의 주소값출력
	fmt.Println(*p) //arr에 저장된 변수값(20) 출력
}

 

 

3) 포인터 변수를 쓰는 이유

 

만약 아래 같은 Intial 함수를 만들어서 초기화를 시킨다고 보자.

 

package main

import "fmt"

func Initial(x [4][4]int64) [4][4]int64 {

	for i := 0; i < 4; i++ {
		for j := 0; j < 4; j++ {
			x[i][j] = 0
		}
	}

	return x
}

func main() {

	var arr [4][4]int64

	Initial(arr)

	for i := 0; i < 4; i++ {
		for j := 0; j < 4; j++ {
			fmt.Print(arr[i][j])
		}
		fmt.Println("")
	}

}

 

이러면 함수의 매개변수로 2차원 배열을 주고 받게 된다. 여기서 2차원 배열의 주소값을 매개변수로 사용하게 되면,  

package main

import "fmt"

func Initial(x *[4][4]int) {

	for i := 0; i < 4; i++ {
		for j := 0; j < 4; j++ {
			x[i][j] = 0
		}
	}

	
}

func main() {

	var arr [4][4]int
	var p = &arr

	Initial(p)

	for i := 0; i < 4; i++ {
		for j := 0; j < 4; j++ {
			fmt.Print(arr[i][j])
		}
		fmt.Println("")
	}

}

굳이 리턴하지 않아도 배열을 초기화할 수 있다. 즉 포인터 변수를 활용해서 함수 외부에서 자유롭게 변수의 값을 수정할 수있다. (전역변수가 아니더라도!)

 

4) 인스턴스 

 

인스턴스는 메모리에 할당된 데이터의 실체이다.  

var data Data

'프로그래밍 > Go' 카테고리의 다른 글

[Go 묘공단 스터디] Up Down 게임  (1) 2023.11.22
[Go 묘공단 스터디] 문자열  (1) 2023.11.22
[Go 묘공단 스터디] 구조체  (0) 2023.11.15
[Go 묘공단 스터디]배열  (0) 2023.11.15
[Go 묘공단 스터디] for문  (0) 2023.11.15