В приведенном ниже коде может ли кто-нибудь объяснить, что такое второй аргумент? это «постоянный указатель на данные».понимание указателей в аргументе функции
Благодаря
В приведенном ниже коде может ли кто-нибудь объяснить, что такое второй аргумент? это «постоянный указатель на данные».понимание указателей в аргументе функции
Благодаря
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
, вы сломали что-то позже в функции. Это всего лишь способ гарантировать, что такие изменения не могут произойти.
Если предположить, что код находится в C или C++, то второй аргумент является постоянным указателем на постоянных данных (и имя переменной data
). Функция обещает, что она будет читать, но не записывать, в память, указанную параметром data
. При нормальных предположениях тип данных представляет собой неподписанные байты.
Второй аргумент - это указатель на const для данных const.
const uint8_t * const == uint8_t const * const
uint8_t const * const == const pointer to const uint8_t
Чтобы помочь вам, думать о задом наперед чтение:
int*
- указатель на Intint const *
- указатель на константные INTint * const
- константный указатель на Intи т.д.
Итак, в вашем примере const uint8_t *const data
является «data const + pointer of uint8_t const» => указателем const для данных const.
Нет, это постоянный указатель на постоянные данные - эффективно параметр «только вход». Тот факт, что сам указатель также постоянный, несколько избыточен. –