知易网
白蓝主题五 · 清爽阅读
首页  > 硬件维护

const指针怎么写 使用技巧与常见问题解析(详细解析)

在硬件维护相关的底层编程中,经常要和内存地址、寄存器打交道,这时候用C或C++写代码就少不了指针。而为了防止误操作改了不该改的数据,const指针就成了一个实用的工具。

const指针的基本写法

const指针的核心是“常量”修饰指针本身或它指向的内容。写法上有几种常见形式,含义各不相同。

第一种:指针指向的内容不能改,但指针可以指向别处

const int* ptr = &value;
// 或等价写法
int const* ptr = &value;

比如你在读取某个硬件状态寄存器的值,地址固定,值你不该修改,就可以用这种写法保护数据。

第二种:指针本身不能改,但指向的内容可以变

int* const ptr = &value;

这种情况适合你已经绑定了某个特定硬件端口的地址,不允许指针乱指,但需要频繁读写该端口的数据。

第三种:指针和指向的内容都不能改

const int* const ptr = &value;

这就像配置了一个只读设备的固定通道,地址不能变,数据也不能写,典型用于只读传感器或固件区域的访问。

实际应用场景

假设你在写一段驱动代码,读取主板上的温度传感器,地址是0x1234。你可以这样定义:

volatile const unsigned char* const temp_reg = (unsigned char*)0x1234;

这里加了volatile是因为硬件寄存器可能被外部改变,const保证你不小心写了这个地址,指针本身也锁定不变,双重保险。

再比如,你有一组校准数据存在ROM里,只想读,不想改:

const float* cal_data = get_calibration_table();
// 下面这行编译会报错,避免误写
// cal_data[0] = 1.5f;

这种写法在调试硬件初始化流程时特别有用,一不小心改了关键数据,设备就可能启动失败。

记住一点:const的位置决定了它修饰谁。靠左修饰内容,靠右修饰指针。多练几次就顺手了。