アレイが関数から返されることができません。
配列の最初の要素へのポインタを返すことができます。あなたの場合、配列の最初の要素はそれ自身配列(行列の行)です。配列へのポインタを返す関数へのポインタを宣言するために必要な構文は、あまりにも秘訣で直接使用することはできません。状況に対処する最もシンプルで使いやすい方法は、typedefを使用することです。
typedef struct my_struct row[4]; // a 4-element row in a matrix
typedef row* (*func)(void); // pointer-to-function returning pointer-to-row
あなたはは、サイズを省略することはできませんとははあなたがローカル配列にポインタを返すことはないことを知っている必要がありますすなわち、配列の代わりに
typedef struct my_struct row[];
typedef row* (*func)(void); // doesn't do what you want
typedef struct my_struct *row;
typedef row* (*func)(void); // doesn't do what you want
をポインタを使用することはできませんCで許可されます。
row* myfunc(void)
{
struct my_struct my_matrix[4][4];
return my_matrix; // will compile, but the behaviour is undefined
// a good compiler will warn you
}
この方法で静的オブジェクトまたは動的に割り当てられたオブジェクトに変換します。
ポインタではなくオブジェクトを返す場合は、ラッパー構造体を使用する必要があります。
typedef struct { struct my_struct elements[4][4]; } wrapper;
wrapper (*foo)(void); //OK
wrapper myfunc(void)
{
wrapper w;
return w; // OK
}
コンパイルエラーは何ですか? –
が期待されます)[(またはそのようなもの) –
最初の 'typedef'には行列(別名2D配列)はなく、何も指すことのできないものはありません。ポインタは配列ではありません!また、配列を関数間でやりとりすることはできません。 – Olaf