У меня есть функция, которая требует const some_type**
как аргумент (some_type
структура, и для функции нужен указатель на массив этого типа). Я объявил локальную переменную типа some_type*
, и инициализированный это. Затем я вызываю функцию как f(&some_array)
, и в компиляторе (gcc) говорится:
error: invalid conversion from ‘some_type**’ to ‘const some_type**’
Какова проблема здесь? Почему я не могу преобразовать переменную в константу?
См .: Почему я не могу передать char **
функции, которая ожидает const char **
? из FAQ по comp.lang.c.
У вас есть несколько вариантов обойти то, что Джеймсдлин изложил в своем ответе.
Вы можете использовать промежуточную переменную.
some_type const* const_some_array = some_array;
f(&const_some_array);
Вы можете изменить параметры f
.
void f(some_type const* const* some_array);
Вероятно, вам нужно указать еще какой-то контекст, например, аргумент передает данные в или из (или и то, и другое?) В функцию?
Попробуйте также делая вашу переменную константой:
some_type const *some_array = ....;
Это читается как «some_array - указатель на константу some_type». Код не может изменить то, на что указывает. Таким образом, вы должны объявить свою переменную const перед передачей ее функции.
(Отредактировано ...)