Что функция "int (* function()) [10]; имею в виду?
Я прочитал фрагмент кода и обнаружил, что есть такая функция.
int (*function())[10]{
...
}
Я смущен. Что означает эта функция и что она вернет?
Ответ 1
Это определение функции, которая возвращает указатель на массив из 10 целых чисел.
Помните, что возвращаемое значение является указателем, а не фактическим массивом. Массивы не могут быть возвращены из функций. По пункту 8.3.5/8 стандарта:
Функции не должны иметь тип возвращаемого типа массива или функции, хотя у них может быть тип возвращаемого типа указателя типа или ссылка на такие вещи
Вот простой пример того, как вы его используете:
int arr[10]; // an array of 10 int
int (*ptr)[10]; // pointer to an array of 10 int
int (*function())[10] // function returning a pointer to an array of 10 int
{
return ptr;
}
int main()
{
int (*p)[10] = function(); // assign to the pointer
}
Вы можете использовать это везде, где обычно используется указатель. Но обратите внимание, что есть лучшие альтернативы, чем указатели, например std::shared_ptr<std::array<T, N>> или std::shared_ptr<std::vector<T>>.
Ответ 2
Способ чтения состоит в том, чтобы найти самый левый идентификатор и выйти из него, вспомнив, что привязка () и [] до *, поэтому *a[] - это массив указателей, (*a)[] - это указатель на массив, *f() - это функция, возвращающая указатель, а (*f)() - указатель на функцию. Таким образом,
function - function
function() - is a function
*function() - returning a pointer
(*function())[10] - to a 10-element array
int (*function())[10] - of int
Ответ 3
это означает, что это указатель на функцию, а аргумент недействителен и возвращает int [10]