構造体へのポインタではなく構造体を返すときに値を代入できないのはなぜですか?

WBOY
リリース: 2024-02-09 17:30:10
転載
938 人が閲覧しました

構造体へのポインタではなく構造体を返すときに値を代入できないのはなぜですか?

C言語で構造体へのポインタではなく構造体を返す場合、直接値を代入できないのは、構造体を返す際に構造体全体がコピーされるためです。構造体へのポインタを返す代わりにコンテンツを返します。構造には大量のデータが含まれる場合があるため、構造全体をコピーするとコストがかかる場合があります。そこでC言語では効率を上げるために、構造体が返された場合は構造体型の変数に代入してのみ使用できるように規定しています。これにより、不必要なコピー操作が回避され、コードの実行効率が向上します。

質問内容

次の構造があるとします

リーリー

しかし、テスト関数の戻り値の型の profile*profile に変更すると、main 関数は機能します。

リーリー ###どうしてこれなの?

回避策

この方法でフィールドを

Profile に割り当てても、目立った影響はありません。 (フィールドの) 一時的な構造体の値を割り当てて、すぐにそれを破棄しています。テストの戻り値はメインのプロファイルのコピーであることに注意してください。これはテストのパラメータにコピーされ、テストから戻るときに再度コピーされます。

ポインタを返す場合、少なくとも原理的には、指定された構造体は代入後も引き続きアクセスできます (ただし、この特定のケースではそうではありません。ポインタはテスト対象の引数のコピーを指しているためです)。

以上が構造体へのポインタではなく構造体を返すときに値を代入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!