3

なぜ構造体を値でC関数に渡すことができるのだろうかと思いますが、配列(アドレスで渡される)では同じことを行うことはできません。

私がCを学んでいたとき、配列は多くのスタックを消費するので、値で渡すのは好ましくないと言われました。

しかし、構造は(常にではないにしても)配列よりも大きく、より複雑なデータ構造であることが多いようです。そのため、この説明は今のところ意味がありません。

誰かができるだけ多くの詳細を手伝うことができますか?

4

1 に答える 1

5

Cでは、配列は常に配列の最初の位置へのポインタとして定義されます。したがって、定義上、配列を関数に渡すときは、そのメモリアドレス、つまりその参照を渡します。

構造体型の変数を定義すると、この構造体を含めるために必要なメモリ内のすべてのスペースが割り当てられます。次のようなものを作成すると、次のようになります。

struct a, b;
...
a = b;

bからaにすべての値をコピーします。同様に、関数に渡すときに、元の構造体の値をスタックにコピーします。これは、パラメータを値で渡すことと呼ばれます。

あなたがあなたの質問で述べていることは本当です。構造体は配列よりも複雑な場合がありますが、値として渡すことは完全に可能であり、非効率的かもしれませんが、配列を値で渡すことができない理由は、デフォルトでポインターとして定義されているためです。

于 2012-09-15T21:25:27.373 に答える