Константный двойной указатель

98
22 июня 2019, 07:40

Есть функция:

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 ?

Answer 1

Объявите функцию как

void Foo(const int *const *ptr);

В этом случае конвертация из int ** станет возможной.

P.S. Это будет работать в С++. В C, к сожалению, хорошего решения нет и придется применять явное преобразование типов.

READ ALSO
Явный вызов конструктора по умолчанию [закрыт]

Явный вызов конструктора по умолчанию [закрыт]

Что это такое? Может ли кто-нибудь привести пример? Решение через указатель не подходит

112
Ошибка с массивом error: invalid conversion from 'int' to 'int*'

Ошибка с массивом error: invalid conversion from 'int' to 'int*'

Ошибку ловлю на строке 'int *mass1= ArrayGenerate(raz);':

126