如何仅使用-1值初始化数组

时间:2012-11-21 16:04:13

标签: c arrays

  

可能重复:
  How to initialize an array in C
  initializing an array of ints

我想知道将int数组初始化为仅包含-1值的最快/最简单的方法。我需要的数组是90英寸长,所以直截了当的方法应该像这样初始化它:

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

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

6 个答案:

答案 0 :(得分:9)

如果您使用的是gcc,请使用designated initializer

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

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

要动态执行此操作,您必须使用malloc进行分配,然后只释放内存,否则释放未由malloccalloc或{{1分配的内存是未定义的行为。

使用此:

realloc

答案 1 :(得分:5)

在初始化时无法在标准C中执行此操作而不显式枚举所有初始值设定项。

在GNU C中,您可以使用GNU C designated initializers

 int array[90] = {[0 ... sizeof array - 1] = -1};
初始化后

   int i;

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

答案 2 :(得分: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);

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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

答案 5 :(得分: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为所有字节设置了相同的值。

相关问题