Есть функция:
void Foo(int **ptr);
Хочется защитить данные в ptr от изменения, то есть сделать данные ptr константными. Если бы указатель был одинарный, можно было бы сделать так:
void Foo(const int *ptr);
Для двойного указателя я сделал так:
void Foo(const int **ptr);
Данные в ptr теперь действительно защищены, но в отличие от случая одинарного указателя, вызов вида:
int **ptr = /*pointer init*/;
Foo(ptr);
невозможен, пишет, что конвертация int** в const int** невозможна. Как исправить эту ситуацию, чтобы сохранить возможность конвертации и защитить данные в ptr ?
Объявите функцию как
void Foo(const int *const *ptr);
В этом случае конвертация из int ** станет возможной.
P.S. Это будет работать в С++. В C, к сожалению, хорошего решения нет и придется применять явное преобразование типов.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости