问问题
22294 次
3 回答
10
您的两个数组是可变长度数组。您不能在 C 中初始化可变长度数组。
要将数组的所有int
元素设置为0
您可以使用该memset
函数:
memset(plansza, 0, sizeof plansza);
顺便说一下,初始化一个不是可变长度数组的数组,初始化所有元素的有效形式0
是:
int array[31][14] = {{0}}; // you need the {}
于 2013-01-06T21:23:40.270 回答
1
If both dimensions are unknown, you'll have to use a one-dimensional array, and do the indexing yourself:
int *ary = (int *) malloc(x * y * sizeof(int));
memset(ary, 0, x * y * sizeof(int));
int elem1_2 = ary[1 * x + 2];
int elem3_4 = ary[3 * x + 4];
and so on. You better define some macros or access functions. And free the memory after use.
于 2013-01-06T21:30:05.827 回答
1
替代@Chris 的建议:
您可以将二维数组创建为一维数组的数组。这将允许您像以前一样进行数组元素索引。请注意,在这种情况下,数组是在堆中分配的,而不是在堆栈中。因此,当您不再需要该数组时,您必须清理分配的内存。
例子:
#include <malloc.h>
#include <string.h>
/* Create dynamic 2-d array of size x*y. */
int** create_array (int x, int y)
{
int i;
int** arr = (int**) malloc(sizeof (int*) * x);
for (i = 0; i < x; i++)
{
arr[i] = (int*) malloc (sizeof (int) * y);
memset (arr[i], 0, sizeof (arr[i]));
}
return arr;
}
/* Deallocate memory. */
void remove_array (int** arr, int x)
{
int i;
for (i = 0; i < x; i++)
free (arr[i]);
free (arr);
}
int main()
{
int x = 5, y = 10;
int i, j;
int** plansza = create_array (x, y); /* Array creation. */
plansza[1][1] = 42; /* Array usage. */
remove_array (plansza, x); /* Array deallocation. */
return 0;
}
于 2013-01-06T21:53:23.000 回答