2016-02-05 104 views
-1

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

由于

+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,你稍后会在函数中破坏某些东西。这只是保证这种改变不会发生的一种方式。

2

假设代码是在C或C++,第二个参数是常数指针恒定数据(和变量名是data)。该函数很有前途,它最多可以读取但不写入data参数指向的内存。在正常假设下,数据的类型是无符号字节。

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 - 常量指针为int

因此在你的例子中,const uint8_t *const data是“数据常量+ uint8_t const指针”=> const数据指针。