Мне нужен большой нулевой массив в C как глобальный. Есть ли способ сделать это, кроме ввода
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
c
arrays
initialization
Клаудиу
источник
источник
char
etc, но если вам нужен массив указателей, вы должны явно установить их в NULL, (абсурдно!) Нет никакой гарантии, что NULL будет представлен нулевыми байтами. Это несмотря на то, что литерал0
неявно представляет нулевой указатель.Ответы:
Глобальные переменные и статические переменные автоматически обнуляются. Если у вас есть просто
в глобальном масштабе это будут все нули во время выполнения. Но на самом деле есть это синтаксис стенографии , если у вас есть локальный массив. Если массив частично инициализирован, элементы, которые не инициализированы, получают значение 0 соответствующего типа. Вы могли бы написать:
Компилятор будет заполнять неписанные записи нулями. В качестве альтернативы вы можете использовать
memset
для инициализации массива при запуске программы:Это было бы полезно, если бы вы изменили его и хотели сбросить его обратно на все нули.
источник
character
. этоinteger
.{}
обсуждение: stackoverflow.com/questions/17589533/…memset
не совсем корректно: я думаю, что это работает только для 0: stackoverflow.com/questions/11138188/…-Werror=missing-braces
в gcc, он должен быть инициализирован как{{0}}
. Если первый элемент структуры является другой структурой, то{{{0}}}
и так далее. См. Stackoverflow.com/questions/5434865/…int arr[256]={1,2,7,{0}};
... который привел меня сюда. Даже не знал, что частичное обнуление было чем-то особенным, пока я его не увидел.Если вы хотите инициализировать массив значениями, отличными от 0,
gcc
вы можете сделать:Это расширение GNU для обозначенных инициализаторов C99 . В старых версиях GCC вам может понадобиться
-std=gnu99
скомпилировать код.источник
...
для обозначения диапазона является специфичным для gcc расширением.