언어 및 도구들 공부/Go

Go 포인터 공부 2

Dr.Mlem 2025. 3. 29. 20:44
Q.
1. 어떤 변수명 앞에 &을 붙여서 해당 변수의 메모리 값을 해당 변수의 타입형을 다루는 포인터 변수에 새로 할당할 수 있어?
2. 정수형 포인터의 메모리 주소를, 다른 정수형 포인터에 할당할 수 있어?
 

A.
좋은 질문이야! Go에서 포인터 관련해서 정확히 짚고 넘어가면, 너의 개념이 더 단단해질 거야. 두 질문 모두 아주 중요하고, 실무에서도 헷갈리기 쉬운 포인트들이라서 예제까지 같이 설명해줄게.


✅ 1. &변수명을 통해 변수의 **메모리 주소를 포인터 변수에 할당할 수 있는가?`

질문 요약: 변수 앞에 &를 붙이면 그 변수의 주소값이 나오는데,
이걸 변수 타입에 맞는 포인터 변수에 넣어도 되는가?

🔹 대답: YES!

var num int = 42        // 일반 int 변수
var p *int = &num       // int 타입을 가리키는 포인터에 num의 주소를 저장
  • 여기서 &num은 num의 메모리 주소를 의미하고,
  • *int 타입의 포인터인 p에 잘 들어감 ✅

👉 중요한 건:

&변수명이 반환하는 주소는 반드시 해당 변수의 타입을 가리키는 포인터 타입이어야 해!


✅ 2. 정수형 포인터의 메모리 주소를, 다른 정수형 포인터에 할당할 수 있어?

질문 요약: p1이라는 정수형 포인터가 있고, 그걸 p2라는 다른 정수형 포인터에 넣을 수 있냐는 것

🔹 대답: YES!

var num int = 10
var p1 *int = &num    // p1은 num의 주소를 가리킴

var p2 *int = p1      // p2도 p1이 가리키는 주소를 그대로 가짐
  • 이 경우 p1과 p2는 동일한 메모리 주소를 가리키고, 따라서 *p1과 *p2는 같은 값을 참조함

🔸 예시로 확인:

*p1 = 99
fmt.Println(*p2) // 출력: 99

→ p1을 통해 바꾼 값이 p2에서도 보임.
왜냐면 둘 다 같은 주소를 가리키고 있기 때문이야.


🎯 요약

질문 설명
&변수를 포인터에 할당? ✅ 가능 타입이 맞기만 하면 됨
포인터 → 포인터 복사? ✅ 가능 같은 주소를 공유함 (공유 참조)

혹시 이걸 구조체 포인터나 배열 포인터, 함수 인자로 응용한 것도 보고 싶으면 말해줘!
Go에선 이 개념이 다른 곳에도 많이 쓰이거든 😎