You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:40:29