Есть функция:
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, к сожалению, хорошего решения нет и придется применять явное преобразование типов.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Что это такое? Может ли кто-нибудь привести пример? Решение через указатель не подходит
Код рабочий, но нечитабельныйКак его упростить
Ошибку ловлю на строке 'int *mass1= ArrayGenerate(raz);':