11

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

xxxxxxx foo() {

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

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

4

2 回答 2

21

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

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

请记住,在大多数情况下,“N-element array of T”类型的表达式被转换为“pointer to T”类型。表达式的类型arr是“5 元素数组的 5 元素数组int”,所以它被转换为“指向 5 元素数组的指针int”,或者int (*)[5]

于 2012-05-29T11:34:51.470 回答
17

为此使用 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 是一个好主意。

于 2012-05-29T07:35:53.447 回答