指针不是箭头:C 和 C++ 究竟怎么跟硬件说话
来源:dev.to — 2026-09-25
📋 概述
让任何工程师在白板上画一个指针,三秒内他一定会画两个框和一根弯箭头。这个画法很整齐、很直观,计算机课用了四十年,但它恰恰是许多人学 C/C++ 时撞上心理墙的原因——机器里没有箭头。CPU 里没有一根标着「箭头」的线,也没有寄存器存「方向」。画出箭头,就把让底层编程豁然开朗的那个事实藏了起来:指针只是一个装有街道地址的普通整数。一旦扔开箭头,用硅片的视角看机器,指针算术不再是黑魔法,数组退化变得顺理成章,连段错误都从随机噩梦变成操作系统的保护机制。
🔑 核心要点
- 对 CPU 来说内存就是一条编号连续的字节储物柜长街,每个柜子装一个字节,柜号就是地址。
- 写 int score = 42 时编译器并不造一个叫 score 的盒子,它只是占 4 个连续柜子并在符号表里记下 0x1000;编译完成后名字永远消失。
- 数组传参时「退化」是因为数组名本身就只是首字节地址,长度信息丢了,所以必须另外传长度。
- 段错误不是随机故障,而是操作系统在你越界触碰不属于你的地址时做出的保护性拦截。
💡 金句
箭头在计算机里并不存在:指针只是一个装着街道地址的普通整数。
👍 0
👎 0
← 返回 dev.to 首页