当test_t被定义为结构体指针时,能否定义指向const的变量?
问题解答
1. 不修改test_t定义,能否定义指向const的变量?
可以,分两种场景处理:
- 若要实现指针指向的结构体内容不可修改(这正是SonarQube建议的“指向const的指针”),直接基于原始结构体类型定义:
const struct test_t *var; - 若要实现指针本身不可修改(变量存储的地址无法变更),则可以这样写:
这等价于:const test_t var;struct test_t * const var;
2. const test_t var是不是指向struct test_t的const指针?
是,但这里的“const指针”指的是指针变量本身不可修改——即var存储的地址不能改变,但它指向的结构体内容仍可修改。这和SonarQube建议的“指向const的指针”(指向的内容不可修改)不是同一个概念。
因为test_t本身是struct test_t *的别名,const test_t修饰的是整个指针类型,等价于struct test_t * const,而非const struct test_t *(后者才是指向const内容的指针)。
满足SonarQube建议的写法
如果SonarQube要求的是指针指向的内容不可修改,直接使用const struct test_t *var即可,无需修改test_t的typedef定义,既符合代码规范要求,也不会影响其他使用test_t的代码。
内容的提问来源于stack exchange,提问作者lifang
相关产品推荐
相关产品推荐

