構造体内のメンバーごとの配列代入が C および C でサポートされる理由
配列のメンバーごとの代入は C および C では通常禁止されていますが、構造体内でサポートされています。この明らかな矛盾は、これらの言語の歴史的進化に由来しています。
構造体定義では、データに連続したメモリを割り当てる便利な方法として配列が導入されました。ただし、C の初期の反復では、配列は単なるメモリ領域へのポインタでした。したがって、ある配列を別の配列に代入すると、要素ごとのコピーではなく、ポインタの代入が行われます。
この動作は、K&R C で構造体の代入が追加された場合でも持続しました。コンパイラは、構造体に個別の代入演算子を定義する代わりに、単にメモリ コピー操作 (memcpy) を使用してすべてのメンバーを割り当てただけです。これにより、事実上、構造体内に配列が組み込まれました。
その結果、構造体の代入では、構造体のコンテキスト内に配列代入の形式が暗黙的に導入されました。ただし、この割り当ては依然として構造体内に制限されており、配列が構造体に含まれている場合でも、配列を別の配列に直接割り当てることは、C および C では依然としてサポートされていません。
構造体内の配列と構造体内の配列のこの違いは、一般配列は 2 つの目的を果たします:
以上がC と C では構造体でのメンバーごとの配列の代入が許可されるのに、スタンドアロン配列では許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。