C言語で構造体へのポインタではなく構造体を返す場合、直接値を代入できないのは、構造体を返す際に構造体全体がコピーされるためです。構造体へのポインタを返す代わりにコンテンツを返します。構造には大量のデータが含まれる場合があるため、構造全体をコピーするとコストがかかる場合があります。そこでC言語では効率を上げるために、構造体が返された場合は構造体型の変数に代入してのみ使用できるように規定しています。これにより、不必要なコピー操作が回避され、コードの実行効率が向上します。
次の構造があるとします
リーリーしかし、テスト関数の戻り値の型の profile
を *profile
に変更すると、main 関数は機能します。
Profile に割り当てても、目立った影響はありません。 (フィールドの) 一時的な構造体の値を割り当てて、すぐにそれを破棄しています。テストの戻り値はメインのプロファイルのコピーであることに注意してください。これはテストのパラメータにコピーされ、テストから戻るときに再度コピーされます。
以上が構造体へのポインタではなく構造体を返すときに値を代入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。