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, ...}; |
但是我只想使用一次数组,所以我希望能够动态地使用它,并且在程序中使用它之后能够释放它,所以我更希望使用像
如果使用gcc,则使用指定的初始值设定项
1 2 3 4 | int array[90] = { [ 0 ... 89 ] = -1} int array[90],i; for(i = 0; i < 90 ; arr[i++] = -1); |
要动态地这样做,您必须使用
使用此:
1 2 3 4 5 |
。
在初始化时,如果不显式枚举所有初始值设定项,就不可能在标准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 |
。
或
1 |
您可以使用memset,但它只能在希望使用值"0"或"-1"时工作,否则它将无法按预期工作,因为memset为所有字节设置了相同的值。
90个字的记忆不多。您很可能会使用大部分时间来分配/取消分配内存。将它放到堆栈上可能比动态创建内存要快。我会看看for循环或omkant的答案是否有效。如果事实证明它确实是瓶颈,那么您可以开始优化。
1 | for (i = 0; i < 90; ++i) { array[i] = -1; } |
。
1 |
它可用于用0或-1初始化