pointerof
pointerof (주소 얻기)
변수나 상수의 값을 바꾸기 위해 그 메모리 주소를 직접 다뤄야 할 때가 있어요. pointerof 표현식은 변수나 상수의 내용을 가리키는 Pointer를 반환해요.
본문
pointerof 표현식은 변수나 상수의 내용을 가리키는 Pointer를 반환해요.
지역 변수를 사용한 예시를 볼게요.
a = 1
ptr = pointerof(a)
ptr.value = 2
a # => 2
pointerof(a)로 얻은 포인터 ptr에 ptr.value = 2로 값을 쓰면, 포인터가 가리키는 원래 변수 a의 값이 2로 바뀌어요. 포인터를 통해 직접 메모리를 건드리는 셈이죠.
인스턴스 변수에서도 동일하게 동작해요.
class Point
def initialize(@x : Int32, @y : Int32)
end
def x
@x
end
def x_ptr
pointerof(@x)
end
end
point = Point.new 1, 2
ptr = point.x_ptr
ptr.value = 10
point.x # => 10
pointerof는 포인터와 관련되어 있기 때문에 unsafe한 연산으로 간주돼요. 포인터를 직접 다루는 만큼 메모리 안전성에 주의해야 해요.
더 알아보기
- 포인터가 왜 unsafe한지 포함해 unsafe한 코드 전반은 Unsafe code 문서에서 다뤄요.
- C 함수에 값을 넘길 때 자동 변환을 활용하려면 to_unsafe 문서를 확인해 보세요.