如何在C中返回二维指针?

时间:2012-05-29 07:31:25

标签: c pointers

正如标题所示,如何返回这样的指针:

xxxxxxx foo() {

    static int arr[5][5];
    return arr;
}

顺便说一句。我知道我必须至少指定一个维度的大小,但是如何?

2 个答案:

答案 0 :(得分:14)

返回类型为int (*)[5](指向int的5元素数组的指针),如下所示

int (*foo(void))[5]
{
  static int arr[5][5];
  ...
  return arr;
}

它分解为

      foo             -- foo
      foo(    )       -- is a function
      foo(void)       --   taking no parameters
     *foo(void)       -- returning a pointer
    (*foo(void))[5]   --   to a 5-element array       
int (*foo(void))[5]   --   of int

请记住,在大多数情况下,类型为“{-1}}的N元素数组”的表达式将转换为“指向T的指针”。表达式T的类型是“arr的5元素数组的5元素数组”,因此它被转换为“指向int的5元素数组的指针”,或{ {1}}。

答案 1 :(得分:13)

为此使用typedef很有帮助:

typedef int MyArrayType[][5];

MyArrayType * foo(void)
{
    static int arr[5][5];
    return &arr;   // NB: return pointer to 2D array
}

如果由于某种原因你不想使用typedef,或者只是对上述函数的裸版看起来很好奇,那么答案是这样的:

int (*foo(void))[][5]
{
    static int arr[5][5];
    return &arr;
}

希望你能明白为什么在这种情况下使用typedef是一个好主意。