У меня возникла проблема с функцией, которая принимает указатель на фиксированный массив. У меня есть простой указатель, и компилятор не разрешит мне static_cast
его к типу указателя к массиву.Как static_cast raw указатель на указатель-фиксированный массив
Вот пример кода: сообщение
int main()
{
typedef int (*Arr3)[3];
int a[3] = {1,2,3};
int* p = &a[0];
Arr3 b = static_cast<Arr3>(p);
}
Ошибка:
prog.cpp:11:10: error: static_cast from 'int *' to 'Arr3' (aka 'int (*)[3]') is not allowed
Arr3 b = static_cast<Arr3>(p);
^~~~~~~~~~~~~~~~~~~~
1 error generated.
Я уверен, что я мог бы использовать reinterpret_cast
, но это действительно мой единственный вариант здесь? Или я чего-то не хватает?
Я могу ошибаться, но не Arr3 а ** типа? IE указатель на массив, который распадается на указатель? Хотя p - это просто указатель на первый элемент массива. –
Возможно, вы захотите объяснить, что вы пытаетесь сделать, указатель на массив нельзя отбрасывать из указателя на его содержащийся тип. Не позволяйте факту, что массивы неявно преобразуются в указатель на их содержащийся тип при падении шляпы, путают вас, они не взаимозаменяемы. – user657267
@DominicMcDonnell No. 'Arr3' является указателем на массив' int [3] '. Не происходит разложение массивов. – emlai