是否可以返回(*ptr)[2]类型?

Mul*_*ary 0 c malloc matrix

如果没有,我怎么能代表使用*ptr?这似乎逃避了我......

基本上我想返回N by 2矩阵,我希望它在内存中保持一致.

Pau*_*l R 6

typedefs是你的朋友:

typedef int A[2]; // typedef an array of 2 ints

A *foo(int n)
{
    A *a = malloc(n * sizeof(A));   // malloc N x 2 array

    // ... do stuff to initialise a ...

    return a;                       // return it
}
Run Code Online (Sandbox Code Playgroud)

要了解typedefs 为什么有用,请考虑没有a的等效实现typedef(感谢@JohnBode为此示例提供正确的语法):

int (*foo(int n))[2]
{
    int (*a)[2] = malloc(n * sizeof *a);   // malloc N x 2 array

    // ... do stuff to initialise a ...

    return a;                              // return it
}
Run Code Online (Sandbox Code Playgroud)


请注意,cdecl是一个用于编码和解码神秘C声明的有用工具 - 在cdecl.org上甚至还有一个方便的在线版本.

  • 不 - 如果你愿意,你可以随意忽略我的建议,但我不会给你一个错误的答案.如果您想以艰难的方式去做,请参阅上面的@ BLUEPIXY评论. (3认同)
  • @MuliYulzary:没有typedef,它将是`int(*foo(int n))[2] {...}`.是的,看起来很奇怪.`malloc`调用看起来像`int(*a)[2] = malloc(n*sizeof*a);` (3认同)
  • 你没有*to,但一般来说它使代码更具可读性,并且更容易获得正确的语法. (2认同)