开发者

Return an array of a known size in C++?

If I can pass in an array of a known size:

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

why can't I return one:

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

here, the ")" in "(*)" generates "syntax error : 开发者_运维技巧)".


The [4] goes after the function name, just like it goes after the variable name in a variable definition:

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

Since this is very obscure syntax, prone to be confusing to everybody who reads it, I would recommend to return the array as a simple int*, if you don't have any special reason why it has to be a pointer-to-array.

You could also simplify the function definition with a typedef:

typedef int intarray_t[4];

intarray_t* fn() { ... }


Its not allowed to return arrays from functions, but there are workarounds.

For example, the following code:

int fn()[4] {
   ...

Doesn't get accepted by the various online compilers; I tried it on the Comeau online compiler, which is considered to be one of the most standard-following of compilers, and even in relaxed mode it says:

error: function returning array is not allowed

Another poster suggests returning int**; this will work, but be very careful that you return heap-allocated memory and not stack-allocated.


You can return int**

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜