1

Cコンポーネントの選択において、構造を返す関数の利点は何ですか?例えば:

struct S {
   int a, b;
} x;

上記の構造体を以下のような関数として割り当てることができるのはなぜですか?これを行うことの利点はありますか?

extern struct S f(); /* Why is this neccesary? */
x = f(); /* Is this accurate */

この人たちに目を開けてください。

4

3 に答える 3

2

たまたまを返す関数ですstruct。それ以上のものはありません。関数intが構造体を返すのを見て驚かないのはなぜですか?

余談ですが、これexternは関数のデフォルトのストレージクラスであるため、ここでは不要です。

于 2012-05-14T19:09:03.800 に答える
2

関数から複数の値を返すことができるので便利です。

たとえば、このように使用できます

struct Point {
   int x;
   int y;
};

struct Point getMousePos()
{
    struct Point pos;
    pos.x = 567;
    pos.y = 343;
    return pos; 
}

int main()
{
    struct Point mouse_pos = getMousePos();
    printf("Mousepos %d,%d\n", mouse_pos.x, mouse_pos.y");   
}

関数はで前方宣言することができextern(これは通常ヘッダーファイルで行われます)、関数自体が別のファイルで定義されている場合でも、他の関数はそのプロトタイプ、つまりパラメーターと戻り値を認識します。

于 2012-05-14T19:13:17.277 に答える
0

構造体へのポインタの代わりに構造体のコピーを取得した場合、それを心配する必要がないfree()こと、またはあるスレッドが構造体に書き込んでいる間に別のスレッドが構造体から読み取るデータ競合があるかどうか、または関数によって返されるポインターは、制御できない可能性のあるアクションによって無効になります。

于 2012-05-14T19:10:16.960 に答える