の例えば配列[n]と配列[]の違いは?
int array[]={1, 2, 3, 4, 5};
と、
int array[5]={1, 2, 3, 4, 5};
コンパイラは最初のケースのための自己によって要素の数を計算する必要があり、それはいくつかの時間を取ることができる({...}
、の間の任意の差があります1234332534要素)ので、2番目のケースは最初の?
の例えば配列[n]と配列[]の違いは?
int array[]={1, 2, 3, 4, 5};
と、
int array[5]={1, 2, 3, 4, 5};
コンパイラは最初のケースのための自己によって要素の数を計算する必要があり、それはいくつかの時間を取ることができる({...}
、の間の任意の差があります1234332534要素)ので、2番目のケースは最初の?
[]
の間の明示的な要素数が{}
の間のイニシャライザの数と同じである限り、違いはありません。
"効率性"に関する疑問は疑問です。配列サイズはコンパイル時に決定されます。つまり、コードの効率には影響しません。とにかく、コンパイラはいずれにしても初期化リストを解析しなければならないので、コンパイルの効率には実質的な影響はありません。
この配列宣言:
int array[] = {1, 2, 3, 4, 5};
はまったく同じである。
int array[5] = {1, 2, 3, 4, 5};
要素の数は、コンパイル時に計算され、その結果、関連付けられたランタイムコストはありません。
最初の宣言の利点は、プログラマが手作業で要素の数を数える必要がないということです。その意味では、より効率的な配列宣言です。
プログラマが配列内にいくつの要素があるかを決定する必要はありませんが、違いはありません。コンパイラは、適切な量を割り当てるために要素を数えます。したがって、コンパイラはコンパイル時に同じ長さのコンパイルを行います。
†。一方で、大きなグローバルアレイとは、バイナリリソースをファームウェアに組み込んで組み込みデバイスにフラッシュする方法です。しかし、私は誰もがこのブルートフォース方法をいくつかのMBよりも大きいものと考えるとは思わない。
+1の#5。 :)(15文字以内) –
2番目のケースでは、メモリを初期化するために値が間違っていると、プリコンパイラはエラーをキャッチします。それはかなりです。
本当ではありません。 '[]'の数はイニシャライザのリストのサイズより大きくてもかまいません。この場合、残りの領域はゼロに初期化されると仮定される。 –
配列のサイズより少ない要素を提供することは許され、他の要素はゼロで初期化されます。また、プリコンパイラは実際のコンパイラによって行われます。 –
"1234332534要素の配列" - スタックに約4GB(12億ints)を割り当てるのは面倒です。通常のスタックサイズは数メガバイト程度です。それ以外の方法を使用する理由はありません。なぜなら、オーバーヘッドがあると、それはコンパイル時にのみ起こるからです。 – Damon
要素を "カウント"するのに要する時間は、残りのコンパイルとの関係では気づかれません。実際には、2番目の形式でもカウントしなければならないと思います。同じ数の要素を処理します。 'int arr [2] = {1、2、3}; - errm? –