C および C での配列の割り当て
C および C では、構造体内での配列のメンバーごとの割り当てが許可されていますが、一般には許可されません。この動作は、言語の歴史的進化の結果です。
当初、C の配列は、「クックされた配列」として知られるメモリ内のポインターとしてモデル化されていました。構造体が導入されたとき、メモリの安全性を確保するために、構造体内の配列は異なる方法で処理されました。これにより、既存のコードとの互換性を損なうことなく、構造体内で配列をメンバーごとに割り当てることができました。
対照的に、C の元の設計では、構造体外への配列の割り当てはサポートされていませんでした。これは、ポインターのリベースに関する懸念と、関数パラメーターとして宣言された配列のサイズ情報の欠如によるものでした。バグや互換性の問題の導入を避けるために、memcpy を使用した明示的な代入が推奨されました。
ただし、Luther Blissett が指摘したように、構造体の代入に関する C の仕様では、含まれる配列のメンバーごとの代入が明示的に許可されています。これは設計の意図しない副作用でしたが、確立されたパターンを壊さずに構造体内でのデータのコピーを容易にする方法として採用されました。
したがって、構造体内での配列のメンバーごとの割り当てのサポートはありますが、一般的にはそうではありません。 C の初期の設計決定とその後の言語の進化の遺産であり、その結果、構造内に埋め込まれた配列と独立して使用される配列が区別されます。
以上がC と C では配列を直接代入できないのに、構造体内では代入できるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。