在 iOS 集成 FFmpeg 時,將 AVFrame.data(類型 uint8_t *[8])傳遞給期望 const uint8_t *const * 的 API,觸發編譯警告:discards qualifiers in nested pointer types。
C 語言類型系統中,T **[8] 不能隱式轉換為 const T *const *,因為這會允許通過間接修改突破 const 約束(雙重指針 const 遞規則)。
const uint8_t *const *srcData = (const uint8_t *const *)pFrame->data;
// 或分步
uint8_t **data = pFrame->data;
const uint8_t *const *constData = (const uint8_t *const *)data;
(const uint8_t *const *)(pFrame->data)
const uint8_t *:指向常量數據的指針(數據不可修改)。const uint8_t *const *:指向「指向常量數據的常量指針」的指針(指針數組不可修改,數據也不可修改)。#pragma clang diagnostic push/pop 精確抑制特定警告(最後手段)。理解指針 const 遞規則,編寫類型安全的音視頻代碼。