инициализировать многомерный массив C переменного размера в ноль - PullRequest
11 голосов
/ 15 сентября 2010

Я хочу инициализировать двумерный массив переменного размера в ноль. Я знаю, что это можно сделать для массива фиксированного размера:

int myarray[10][10] = {0};

но это не работает, если я делаю это:

int i = 10;
int j = 10;
int myarray[i][j] = {0};

Есть ли однострочный способ сделать это, или мне нужно перебрать каждый элемент массива?

Спасибо

Ответы [ 5 ]

9 голосов
/ 15 сентября 2010

Вы не можете инициализировать его инициализатором, но вы можете memset() массив до 0.

#include <string.h>

int main(void) {
  int a = 13, b = 42;
  int m[a][b];
  memset(m, 0, sizeof m);
  return 0;
}

Примечание.объявление m (int m[a][b];) является ошибкой.

3 голосов
/ 15 сентября 2010

Стандарт онлайн C99 (черновик n1256) , раздел 6.7.8, пункт 3:

Тип инициализируемого объекта должен быть массивом неизвестного размера или типом объекта, который не является типом массива переменной длины.

Акцент мой.

Как и все остальные, лучше всего использовать memset().

1 голос
/ 15 сентября 2010

Если вы получите указатель на вашу структуру данных, вы можете попробовать memset .

0 голосов
/ 15 сентября 2010

Вы не можете создать статический массив, используя непостоянные переменные. Попробуйте использовать динамическое распределение:

int i = 10;
int j = 10;
size_t nbytes = i*j*sizeof(int);
int* myarray = (int*) malloc(nbytes);
memset(myarray,0,nbytes);
0 голосов
/ 15 сентября 2010

Двумерные массивы переменного размера не поддерживаются в C. Одно измерение (я не могу вспомнить, первое это или второе) должно быть исправлено. Я рекомендую зациклить его, как только он будет определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...