可能的重复:
如何在 C 中
初始化一个数组,初始化一个整数数组
我想知道将 int 数组初始化为仅包含 -1 值的最快/最简单方法。我需要的数组长 90 个整数,所以直接的方法应该是像这样初始化它:
int array[90]={-1, -1, -1, ...};
但我只想使用一次数组,所以我希望能够动态使用它并且能够在程序中使用它后释放它,所以我更多地寻找一种快速的方式calloc
,但不是零,而是 -1课程。
可能的重复:
如何在 C 中
初始化一个数组,初始化一个整数数组
我想知道将 int 数组初始化为仅包含 -1 值的最快/最简单方法。我需要的数组长 90 个整数,所以直接的方法应该是像这样初始化它:
int array[90]={-1, -1, -1, ...};
但我只想使用一次数组,所以我希望能够动态使用它并且能够在程序中使用它后释放它,所以我更多地寻找一种快速的方式calloc
,但不是零,而是 -1课程。
如果您使用的是 gcc,则使用指定的初始化程序
int array[90] = { [ 0 ... 89 ] = -1}
int array[90],i;
for(i = 0; i < 90 ; arr[i++] = -1);
要动态地执行此操作,您必须使用malloc
然后仅释放内存进行分配,否则释放未分配的内存malloc
,calloc
或者realloc
是未定义的行为。
用这个:
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指定的初始值设定项
int array[90] = {[0 ... sizeof array - 1] = -1};
初始化后:
int i;
for (i = 0; i < sizeof array / sizeof *array; i++)
{
array[i] = -1;
}
写这个很痛苦,但你总是可以使用宏
#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);
没有简单的办法,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 为所有字节设置了相同的值。
memset( array, -1 , sizeof(array) ) ;
可用于初始化为 0 或 -1
90个字不是很多记忆。您可能会花费大部分时间来分配/取消分配内存。将它放在堆栈上可能比动态创建内存要快。我会看看 for 循环或 Omkant 的答案是否有效。如果事实证明它确实是瓶颈,那么您可以开始优化。
for (i = 0; i < 90; ++i) { array[i] = -1; }