Если я могу передать в массиве известного размера:
void fn(int(*intArray)[4])
{
(*intArray)[0] = 7;
}
почему не может я возвращать тот:
int intArray[4] = {0};
int(*)[4] fn()
{
return &intArray;
}
здесь,")", в" (*)" генерирует "синтаксическую ошибку:)".
[4]
идет после имени функции, как и после имени переменной в определении переменной:
int (*fn())[4]
{
return &intArray;
}
Поскольку это очень непонятный синтаксис, который может сбивать с толку всех, кто его читает, я бы рекомендовал вернуть массив как простой int *
, если у вас нет особой причины, по которой он должен быть указателем на массив.
Вы также можете упростить определение функции с помощью typedef:
typedef int intarray_t[4];
intarray_t* fn() { ... }
Нельзя возвращать массивы из функций, но есть обходные пути .
Например, следующий код:
int fn()[4] {
...
Не принимается различными онлайн-компиляторами; Я пробовал это на онлайн-компиляторе Comeau, который считается одним из наиболее стандартных компиляторов, и даже в расслабленном режиме он говорит:
ошибка: функция, возвращающая массив, не разрешена
Другой плакат предлагает вернуть int **
; это будет работать, но будьте очень осторожны, чтобы вернуть память, выделенную кучей, а не выделенную стеком.