Подтвердить что ты не робот

Что функция "int (* function()) [10]; имею в виду?

Я прочитал фрагмент кода и обнаружил, что есть такая функция.

int (*function())[10]{
 ...
}

Я смущен. Что означает эта функция и что она вернет?

4b9b3361

Ответ 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]