Возвратить массив известного размера в C++?

Если я могу передать в массиве известного размера:

void fn(int(*intArray)[4])
{
    (*intArray)[0] = 7;
}

почему не может я возвращать тот:

int intArray[4] = {0};
int(*)[4] fn()
{
    return &intArray;
}

здесь,")", в" (*)" генерирует "синтаксическую ошибку:)".

5
задан Kay 9 June 2010 в 11:55
поделиться

3 ответа

[4] идет после имени функции, как и после имени переменной в определении переменной:

int (*fn())[4]
{
    return &intArray;
}

Поскольку это очень непонятный синтаксис, который может сбивать с толку всех, кто его читает, я бы рекомендовал вернуть массив как простой int * , если у вас нет особой причины, по которой он должен быть указателем на массив.

Вы также можете упростить определение функции с помощью typedef:

typedef int intarray_t[4];

intarray_t* fn() { ... }
4
ответ дан 14 December 2019 в 08:42
поделиться

Вы можете вернуть int **

1
ответ дан 14 December 2019 в 08:42
поделиться

Нельзя возвращать массивы из функций, но есть обходные пути .

Например, следующий код:

int fn()[4] {
   ...

Не принимается различными онлайн-компиляторами; Я пробовал это на онлайн-компиляторе Comeau, который считается одним из наиболее стандартных компиляторов, и даже в расслабленном режиме он говорит:

ошибка: функция, возвращающая массив, не разрешена

Другой плакат предлагает вернуть int ** ; это будет работать, но будьте очень осторожны, чтобы вернуть память, выделенную кучей, а не выделенную стеком.

2
ответ дан 14 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: