41 lines
761 B
Text
41 lines
761 B
Text
# Pointer in struct
|
|
struct Point
|
|
x: *int,
|
|
y: int,
|
|
end
|
|
|
|
# Pointer in function parameter
|
|
fn take_ptr(ptr: *int) -> int do
|
|
0 # dummy
|
|
end
|
|
|
|
# Pointer in return type
|
|
fn return_ptr(x: int) -> *int do
|
|
x as *int
|
|
end
|
|
|
|
fn main() -> int do
|
|
# Basic pointer
|
|
let x: *int = 0 as *int;
|
|
let y = x; # Should infer *int
|
|
|
|
# Reference and dereference
|
|
let val = 42;
|
|
let ptr = &val; # Should be *int
|
|
let deref_val = *ptr; # Should be int
|
|
|
|
let ptr_to_ptr: *(*int) = &ptr; # **int
|
|
|
|
let p = Point { x: ptr, y: 42 };
|
|
|
|
take_ptr(ptr);
|
|
|
|
let z = return_ptr(deref_val);
|
|
|
|
# Nested operations
|
|
let nested_ptr = &ptr; # **int
|
|
let deref_once = *nested_ptr; # *int
|
|
let deref_twice = *deref_once; # int
|
|
|
|
42
|
|
end
|