Как инициализировать массив до 0 в C?

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

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

?

Ответ 1

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

char ZEROARRAY[1024];

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

char ZEROARRAY[1024] = {0};

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

memset(ZEROARRAY, 0, 1024);

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

Ответ 2

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

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

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

Ответ 3

Обычно в c объявленная, но undefined переменная рассматривается как 0. Например,

   int main(){
   int a[500];
   for(i=0;i<500;i++)
   printf("%d",a[i]);// It will print elements with 0 along with a garbage value
 }

Чтобы избежать этой и ручной инициализации:

int main(){
int i,a[500];
for (i=0;i<500;i++){
 a[i]=0;// set value 0 to all the array index
}
for (i=0;i<500;i++)
 printf("%d\n",a[i]);
 return 0;   
 }