タイトルが示すように、次のようにポインタを返す方法:
xxxxxxx foo() {
static int arr[5][5];
return arr;
}
ところで。少なくとも 1 つの次元のサイズを指定する必要があることはわかっていますが、どのようにすればよいでしょうか?
戻り値の型は、次のように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 要素配列T
」型の式は「へのポインタT
」型に変換されることに注意してください。式の型arr
は「の5要素配列の5要素配列int
」なので、「の5要素配列へのポインタint
」、またはint (*)[5]
.
これには 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 を使用することがなぜ良い考えなのか、お分かりいただけたと思います。