Вернуть массив известного размера в C ++? - PullRequest
5 голосов
/ 09 июня 2010

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

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

почему я не могу вернуть один:

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

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

Ответы [ 3 ]

4 голосов
/ 09 июня 2010

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

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

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

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

typedef int intarray_t[4];

intarray_t* fn() { ... }
2 голосов
/ 09 июня 2010

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

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

int fn()[4] {
   ...

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

error: function returning array is not allowed

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

1 голос
/ 09 июня 2010

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

...