C である配列を別の配列に直接代入できないのはなぜですか?
Dec 03, 2024 am 02:57 AMC の配列 : 代入可能性の制限を理解する
C の配列は独特の動作を示します。その 1 つは代入可能性の制限です。次のコードで示されているように、ある配列を別の配列に代入することが禁止されている理由を調べてみましょう。
int numbers[5] = {1, 2, 3}; int values[5] = {0, 0, 0, 0, 0}; values = numbers; // Error: C2106
このコードは、「エラー C2106: '=' : left operand should be l-value」というエラーを生成します。変更不可能なオブジェクトに代入しようとしました。
C の配列は変更不可能であると見なされるため、または主に C との下位互換性のため、代入できません。ある配列を別の配列に代入するには、そのすべての要素をコピーする必要がありますが、これは非常に非効率でエラーが発生しやすくなります。
代わりに、C では標準のコンテナの使用を推奨しています。 std::array や std::vector などのテンプレート ライブラリ (STL)。効率的でタイプ セーフな配列のような機能を提供します。たとえば、std::array を使用して目的の機能を実現します。
#include <array> std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; // No error!
プリミティブ配列 (元のコードのものと同様) の場合、ループを使用して要素を手動でコピーするか、 std::copy function:
#include <algorithm> int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values);
さらに、提供されたコードは、C 言語を利用して、値の配列を空の値で初期化するショートカットを示しています。初期化子が提供されていない場合、値はゼロに初期化されるという規則。したがって、次の 2 つのコード スニペットは同等です:
int values[5] = {0, 0, 0, 0, 0}; int values[5] = {};
これらのニュアンスを理解することで、代入エラーを回避し、C で配列を効果的に操作できます。
以上がC である配列を別の配列に直接代入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?
