2016-02-05 4 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 * - указатель на константные INT
  • int * const - константный указатель на Int

и т.д.

Итак, в вашем примере const uint8_t *const data является «data const + pointer of uint8_t const» => указателем const для данных const.

Смежные вопросы