13

我读了一段代码,发现有这样的功能。

int (*function())[10]{
 ...
}

我很困惑。这个函数是什么意思,它会返回什么?

4

3 回答 3

16

它是一个函数的定义,它返回一个指向 10 个整数的数组的指针。

请记住,返回值是一个指针,而不是一个实际的数组。数组不能从函数返回。根据标准第 8.3.5/8 段:

函数不应具有类型数组或函数的返回类型,尽管它们可能具有类型指针或对此类事物的引用的返回类型

这是一个简单的示例,说明您将如何使用它:

int arr[10];     // an array of 10 int
int (*ptr)[10]; // pointer to an array of 10 int

int (*function())[10] // function returning a pointer to an array of 10 int
{
    return ptr;
}

int main()
{
    int (*p)[10] = function(); // assign to the pointer
}

您可以在通常使用指针的任何地方使用它。但请注意,有比指针更好的选择,比如std::shared_ptr<std::array<T, N>>or std::shared_ptr<std::vector<T>>

于 2013-06-09T18:11:23.740 回答
8

读取它的方法是找到最左边的标识符并找出路,记住它()[]bind before *,指针数组也是,是指向*a[]数组的指针,是返回指针的函数,是指向 a 的指针功能。因此,(*a)[]*f()(*f)()

      function          - function
      function()        - is a function
     *function()        - returning a pointer
    (*function())[10]   - to a 10-element array
int (*function())[10]   - of int
于 2013-06-10T03:24:38.660 回答
0

这意味着这是一个函数指针,参数为 void 并返回 int[10]

于 2013-06-14T02:40:10.810 回答