ホームページ  >  記事  >  バックエンド開発  >  構造体へのポインタではなく構造体を返すときに値を代入できないのはなぜですか?

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

WBOY
WBOY転載
2024-02-09 17:30:10956ブラウズ

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

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

質問内容

次の構造があるとします

リーリー

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

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

回避策

この方法でフィールドを

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

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

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

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。