5

なぜ彼らはこのように設計するのですか?私は非常に混乱しています。

更新:質問の答えを本当に知りたいです。私はグーグルで検索しましたが、非常に役立つものは何も見つかりません。

多分2つの理由があると思います:

1 : テクニカル。コンパイラで実装するのは難しいかもしれません(構造体の参照渡し)。答えがこれなら。説明してください。

2 : 使用法 (プログラミング) に適しています。私が思うに、構造体が参照渡しの場合、よりエレガント(または美しい?)です。利点を示すいくつかの例を見つけることができません (ストラット パス バイ バリュー)。私のプログラミング歴は長くありません。実際には、構造体をポインターとして関数に渡すことを好みます (ポインターはスタック上で占有するスペースが少なくなります)。

4

2 に答える 2

-1

配列は、そのセットの最初のメモリ アドレスへのポインタとして配列の名前を持つ連続したメモリ位置を含むセットと考えることができます。

したがって、配列を名前で渡すと、実際にはそのメモリのアドレスのコピーを渡していることは明らかです。

ただし、構造体はオブジェクトのセットであるため、構造体名を渡すと、そのセット内のオブジェクトのコピーが渡されます。

PS: これは非常に基本的な C の概念であり、明らかな疑問です。優れた C の本を読んで、概念をさらに明確にしてください。

于 2012-06-01T03:13:42.563 に答える
-2

配列パスは、実際にはアドレスを値で渡すことです。cでは、参照によるパスはありません。

配列の値全体を渡さない理由は、

まず、パフォーマンス。

次に、ポインタを配列として使用できるため、コンパイラはポインタが指すメモリのサイズを知ることができず、配列内のすべての値を関数に渡すことはできません。Cは、配列の正確なサイズを認識し、配列の値を渡すように設計できますが、配列の方法でポインターを使用することはできず、malloc配列を使用することはできません。

于 2012-06-01T03:22:01.847 に答える