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>>またはのように、ポインタ全体よりも優れた代替手段があることに注意してくださいstd::shared_ptr<std::vector<T>>

于 2013-06-09T18:11:23.740 に答える
8

それを読み取る方法は、左端の識別子を見つけて、それを覚えて()[]前にバインドすることです*。したがって*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 に答える