Pointeur
Wave에서 포인터는 ptr<T> 형태의 명시적 타입입니다.
주소 획득은 &, 역참조는 deref를 사용합니다.
선언과 초기화
var x: i32 = 10;
var p: ptr<i32> = &x;
포인터 타입은 중첩 가능합니다.
var p1: ptr<i32> = &x;
var p2: ptr<ptr<i32>> = &p1;
역참조
var x: i32 = 10;
var p: ptr<i32> = &x;
println("{}", deref p); // 10
deref p = 20;
println("{}", x); // 20
null 리터럴 규칙
null은 정식 리터럴입니다. 식별자가 아니며 변수명으로 사용할 수 없습 니다.
핵심 규칙:
null은 오직ptr<T>대상에만 대입할 수 있습니다.i32,bool,array<...>같은 비포인터 타입에는 대입할 수 없습니다.- 정수 리터럴(
0,123,-1등)으로 포인터를 초기화할 수 없습니다. 명시적으로null을 사용합니다.
var p: ptr<i32> = null; // OK
var arrp: ptr<array<i32, 3>> = null; // OK
// var n: i32 = null; // ERROR
// var b: bool = null; // ERROR
// var null: i32 = 1; // ERROR (`null`은 예약 리터럴)
포인터 연산 범위 (현재)
현재 포인터는 주로 비교에 사용됩니다.
if (p == null) { ... }
if (p != null) { ... }
if (p1 == p2) { ... }
주의:
- 포인터 산술(
p + 1,p - 1)은 현재 지원되지 않습니다.