2016-02-05 84 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數據指針。