Aliasing

1

可变借用

4 分钟

C 里,拿到 T * 通常意味着“可以改”。问题是,C 不阻止你同时留下很多入口:

uint8_t *a = buf;
uint8_t *b = buf;

a[0] = 1;
printf("%u\n", b[0]);

这段代码本身没错,但在真实项目里,多个指针同时读写同一块数据,会让状态变化很难追踪。谁刚刚改过?谁还拿着旧视图?某个函数会不会在你读之前顺手改了?

阅读更多