关于C#:如何初始化只有-1值的数组

How to initialize an array with only -1 values

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to initialize an array in C
initializing an array of ints

我想知道初始化一个int数组只包含-1个值的最快/最简单的方法。我需要的数组是90个整数,所以直接的方法应该是这样初始化它:

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

但是我只想使用一次数组,所以我希望能够动态地使用它,并且在程序中使用它之后能够释放它,所以我更希望使用像calloc这样的快速方法,但不是零,当然是-1。


如果使用gcc,则使用指定的初始值设定项

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

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

要动态地这样做,您必须使用malloc进行分配,然后只释放内存,否则释放未由malloc分配、callocrealloc分配的内存是未定义的行为。

使用此:

1
2
3
4
5
int *array;
array=malloc(sizeof(int)*n);
for(i=0;i<n;array[i++]=-1);
// After use free this
free(array);


在初始化时,如果不显式枚举所有初始值设定项,就不可能在标准C中执行该操作。

在GNU C中,可以使用GNU C指定的初始值设定项

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

初始化后:

1
2
3
4
5
6
   int i;

   for (i = 0; i < sizeof array / sizeof *array; i++)
   {
       array[i] = -1;
   }


写这个很伤人,但你总是可以使用宏

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

然后在其他代码中:

1
2
int array[90];
FILL(array, -1);

没有简单的方法,calloc只初始化为0。

你可以的

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

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

您可以使用memset,但它只能在希望使用值"0"或"-1"时工作,否则它将无法按预期工作,因为memset为所有字节设置了相同的值。


90个字的记忆不多。您很可能会使用大部分时间来分配/取消分配内存。将它放到堆栈上可能比动态创建内存要快。我会看看for循环或omkant的答案是否有效。如果事实证明它确实是瓶颈,那么您可以开始优化。

1
for (i = 0; i < 90; ++i) { array[i] = -1; }


1
memset( array, -1 , sizeof(array) ) ;

它可用于用0或-1初始化