offsetof¶
一个 offsetof
表达式返回一个类或结构体实例中字段的字节偏移量。
offsetof
表达式有两种形式。第一种形式以任何类型作为第一个参数,以一个以 @
为前缀的实例变量名作为第二个参数,并返回该实例变量相对于给定类型实例的字节偏移量
struct Foo
@x = 0_i64
@y = 34_i8
@z = 42_u16
end
offsetof(Foo, @x) # => 0
offsetof(Foo, @y) # => 8
offsetof(Foo, @z) # => 10
第二种形式以任何 Tuple
实例类型作为第一个参数,以一个整数字面量索引作为第二个参数,并返回相应的元组元素相对于给定类型实例的字节偏移量
offsetof(Tuple(Int64, Int8, UInt16), 0) # => 0
offsetof(Tuple(Int64, Int8, UInt16), 1) # => 8
offsetof(Tuple(Int64, Int8, UInt16), 2) # => 10
这是一个底层原语,只有在 C API 需要直接与 Crystal 类型的内存布局交互时才有用。