3
4

3 回答 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 回答