Как инициализировать массив до 0 в C? - PullRequest
135 голосов
/ 07 апреля 2010

Мне нужен большой нулевой массив в C как глобальный. Есть ли способ сделать это, кроме ввода

char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };

Ответы [ 2 ]

235 голосов
/ 07 апреля 2010

Глобальные переменные и статические переменные автоматически обнуляются.Если у вас есть просто

char ZEROARRAY[1024];

в глобальной области видимости, это будет все нули во время выполнения.Но на самом деле это сокращенный синтаксис, если у вас был локальный массив. Если массив частично инициализирован, элементы, которые не инициализированы, получают значение 0 соответствующего типа. Вы можете написать:

char ZEROARRAY[1024] = {0};

Компилятор заполнит неписанные записи нулями.В качестве альтернативы вы можете использовать memset для инициализации массива при запуске программы:

memset(ZEROARRAY, 0, 1024);

Это было бы полезно, если бы вы изменили его и захотели сбросить его обратно на все нули.

26 голосов
/ 08 августа 2013

Если вы хотите инициализировать массив значениями, отличными от 0, с помощью gcc вы можете сделать:

int array[1024] = { [ 0 ... 1023 ] = -1 };

Это расширение GNU для C99 Назначенные инициализаторы . В старых версиях GCC вам может понадобиться -std=gnu99 для компиляции кода.

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