理解函数参数中的指针

时间:2016-02-05 15:19:26

标签: c pointers

在下面的代码中,有人可以解释第二个参数是什么吗?它是“数据的常量指针”。

谢谢

3 个答案:

答案 0 :(得分:4)

第二个参数是一个指向const数据的const指针。

 const uint8_t * const == uint8_t const * const
 uint8_t const * const == const pointer to const uint8_t

为了帮助你,请考虑向后阅读:

  • int* - 指向int
  • 的指针
  • int const * - 指向const int的指针
  • int * const - const指向int
  • 的指针

所以在你的例子中,const uint8_t *const data是"数据const +指针uint8_t const" => const数据的const指针。

答案 1 :(得分:2)

假设代码是C或C ++,第二个参数是指向常量数据的常量指针(变量名称为data)。该函数承诺它最多会读取{而不是写入data参数指向的内存。在正常假设下,数据类型是无符号字节。

答案 2 :(得分:2)

const uint8_t *const data实质上意味着该函数无法更新data参数或其指向的对象。 IOW,您无法将data设置为指向函数中的其他对象。

简而言之:

const T *p           -- p is writable, *p is not
T const *p           -- same as above
T * const p          -- *p is writable, p is not
const T * const p    -- neither p nor *p are writable
T const * const p    -- same as above 

修改

请注意,对data的任何更改都不会反映在调用函数中(与对*data的任何更改都不同),那么为什么还要费心const?通常,这是因为函数体需要在整个执行过程中保留该指针; IOW,如果你不小心更新了data,你就会在函数中破坏某些东西。这只是一种保证不会发生这种变化的方法。