6

重複の可能性:
Cで配列を初期化する方法
intの配列を初期化する

-1の値のみを含むようにint配列を初期化する最も速く/最も簡単な方法について疑問に思います。必要な配列の長さは90intなので、次のように初期化するのが簡単な方法です。

int array[90]={-1, -1, -1, ...};

しかし、私は配列を1回だけ使用したいので、動的に使用できるようにし、プログラムで使用した後に解放できるようにしたいのでcalloc、ゼロの代わりに-1のような高速な方法を探しています。コース。

4

6 に答える 6

10

gccを使用している場合は、指定された初期化子を使用します

int array[90] = { [ 0 ... 89 ] = -1}

int array[90],i;
for(i = 0; i < 90 ; arr[i++] = -1);

これを動的に行うには、を使用して割り当てる必要があります。mallocその後、メモリを解放するだけです。そうでない場合は、によって割り当てられていないmalloccallocまたはrealloc未定義の動作であるメモリを解放します。

これを使って:

int *array;
array=malloc(sizeof(int)*n);
for(i=0;i<n;array[i++]=-1);
// After use free this
free(array);
于 2012-11-21T16:06:24.897 に答える
5

すべての初期化子を明示的に列挙せずに、初期化時に標準Cでこれを行うことはできません。

GNU Cでは、GNUC指定の初期化子を使用できます

 int array[90] = {[0 ... sizeof array - 1] = -1};

初期化後:

   int i;

   for (i = 0; i < sizeof array / sizeof *array; i++)
   {
       array[i] = -1;
   }
于 2012-11-21T16:05:02.590 に答える
3

これを書くのは痛いですが、いつでもマクロを使うことができます

#define FILL(arr, val) \
for(int i_##arr = 0; i_##arr < sizeof arr / sizeof *arr; ++i_##arr) \
{ \
    arr[i_##arr] = val;\
}

次に、他のコードで:

int array[90];
FILL(array, -1);
于 2012-11-21T16:21:54.073 に答える
1

90語はあまり記憶に残りません。メモリの割り当て/割り当て解除にかなりの時間を費やす可能性があります。スタックに配置する方が、メモリを動的に作成するよりもおそらく高速です。forループまたはOmkantの答えが機能するかどうかを確認します。それが本当にボトルネックであることが判明した場合は、最適化を開始できます。

for (i = 0; i < 90; ++i) { array[i] = -1; }
于 2012-11-21T16:15:32.520 に答える
1
memset( array, -1 , sizeof(array) ) ;

0または-1で初期化するために使用できます

于 2012-11-21T16:07:50.953 に答える
1

簡単な方法はありません。callocは0に初期化するだけです。

できるよ

int *array = malloc(sizeof(int)*size);
for (i=0;i<size;i++) array[i] = -1;

また

memset(array,-1,sizeof(int)*size);

memsetを使用できますが、値「0」または「-1」を使用する場合にのみ機能します。それ以外の場合、memsetはすべてのバイトに同じ値を設定するため、期待どおりに機能しません。

于 2012-11-21T16:21:21.687 に答える