PHpullh
학습 라이브러리/Go/포인터 — & * 기초

GO · 기초 문법

포인터 — & * 기초

Go의 포인터. C처럼 직접 메모리 주소를 다루지만 포인터 연산은 없습니다.

기초 문법입문pointer포인터&*new

핵심 설명

Go의 포인터. C처럼 직접 메모리 주소를 다루지만 포인터 연산은 없습니다.

Go code

package main

import "fmt"

func increment(n *int) {
	*n++   // 역참조로 원본 수정
}

func newInt(val int) *int {
	// 로컬 변수 주소 반환 OK — Go GC가 관리
	return &val
}

func main() {
	x := 42
	p := &x    // p는 x의 주소를 가리키는 포인터

	fmt.Println("값:", x)           // 42
	fmt.Println("주소:", p)         // 0xc0000b4008 (예시)
	fmt.Println("역참조:", *p)      // 42

	*p = 100   // 포인터를 통해 값 변경
	fmt.Println("변경 후:", x)      // 100

	// 함수로 포인터 전달
	increment(&x)
	fmt.Println("increment 후:", x) // 101

	// new() — 제로값으로 초기화된 포인터 반환
	q := new(int)   // *int, 값은 0
	*q = 50
	fmt.Println("new:", *q)

	// nil 포인터 확인
	var ptr *int
	fmt.Println("nil?", ptr == nil) // true
	// fmt.Println(*ptr)            // 패닉! nil 역참조

	r := newInt(99)
	fmt.Println("힙 할당:", *r) // 99
}

학습 팁

Go는 포인터 연산(p++)을 허용하지 않습니다. 이는 의도적인 설계로, 메모리 안전성을 높입니다.

주의할 점

nil 포인터를 역참조(*ptr)하면 런타임 패닉입니다. 포인터를 사용하기 전에 항상 ptr != nil을 확인하세요.

자주 묻는 질문

포인터 — & * 기초란 무엇인가요?

Go의 포인터. C처럼 직접 메모리 주소를 다루지만 포인터 연산은 없습니다.

포인터 — & * 기초 학습 시 주의할 점은 무엇인가요?

nil 포인터를 역참조( *ptr )하면 런타임 패닉입니다. 포인터를 사용하기 전에 항상 ptr != nil 을 확인하세요.