指针第一层:引用和裸指针怎么分工
C 里的 T * 太常用了。它可以表示很多不同语义:
void print_config(const struct Config *cfg);
void reset_config(struct Config *cfg);
int parse_packet(const uint8_t *data, size_t len, struct Packet *out);
void driver_write(void *addr, uint32_t value);
这些在 C 里都长得像指针,但语义完全不同:
- 只读借用一个对象
- 修改调用方对象
- 指针加长度表示一段 buffer
- 输出参数
- 可能为空的指针
- 硬件地址或 FFI 传来的地址
Rust 不会把这些都塞进一个“指针”概念里。第一层可以先用这张表:
阅读更多