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

为何修改const指针参数未触发编译警告或错误?

问题原因解析
  • 你写的const uint32_t *pData,本质是指向const数据的指针——它只限制了不能通过这个指针修改指向的uint32_t内容,但指针变量pData本身是完全可以修改的。函数的参数是原指针的副本,修改这个副本的指向属于合法操作,编译器自然不会触发警告。
  • 如果要让指针本身的指向不能被修改,得把const放到*的右边,写成uint32_t *const pData。这时如果在函数里修改pData的指向,编译器才会报错或警告。
  • 举个直观的对比:
    • 允许修改指针指向、但不能修改指向内容的写法(你的代码):
      static void CalcCRC(const uint32_t *pData, uint8_t noWords)
      {
          pData = pData + noWords; // 合法,无警告
          // *pData = 0; // 非法,会触发警告,因为指向的内容是const
      }
      
    • 禁止修改指针指向、但允许修改指向内容的写法:
      static void CalcCRC(uint32_t *const pData, uint8_t noWords)
      {
          pData = pData + noWords; // 非法,触发编译警告/错误
          *pData = 0; // 合法,无警告
      }
      

内容的提问来源于stack exchange,提问作者ElecDesigner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:15:27