4

配列を取得して処理するように設計された大きなコード ブロックがあります。現在のプロジェクトには要素が 1 つしかないため、変数を char に変更する代わりに、char 配列 [1] として宣言しました。このようにして、コードを変更する必要がなく、バグを追加するリスクがなく、要件が大きくなった場合に簡単に増やすことができます。

正常にコンパイルされているように見えますが、フードの下で何が起こっているのか知りたくなりました。メモリを無駄にしていますか? これは余分な処理時間を追加しますか?コンパイラはそれをすべて最適化するので、入力しても違いはありませんか?

配列を使用することの考えられる欠点を誰でも説明できますか?

私はcとc ++を使用していますが、それらの間で違いはありますか?

4

4 に答える 4

9

良い戦略のように聞こえますが、欠点はありません。C でも C++ でもメモリを無駄にしているわけではありません。サイズ 1 の配列が使用するメモリは、同じ型の変数が使用するメモリと同じです。

コンパイラが微視的に効率の悪いコードを生成する可能性はありますが、実際には心配する必要はありません。

于 2013-09-27T10:36:31.467 に答える
7

標準では、配列ではないオブジェクトのアドレスを取得し、サイズ 1 の配列として扱うことが許可されています (したがって、末尾へのポインターを取得できます)。

C++11 標準のセクション 5.7.4 を参照してください。

これらの演算子の目的上、非配列オブジェクトへのポインターは、要素の型としてオブジェクトの型を持つ長さ 1 の配列の最初の要素へのポインターと同じように動作します。

于 2013-09-27T10:41:59.853 に答える