Zależy gdzie została zadeklarowana. Niezainicjalizowane zmienne (mówię o primitive types) będące w obszarze pamięci dla zmiennych globalnych (tzn. po prostu globalne albo np. wewnątrz funkcji ale oznaczone jako static) będą wyzerowane. Ale zmienne lokalne już nie - dostaną takie wartości jakie wynikają z wartości bajtów na których zostały zaalokowane. Na szczęście wyzerowanie nie jest żadnym problemem. W C++ wystarczy, że dopiszesz puste nawiasy klamrowe:
int a[N] {};
(wartości elementów nie podane w nawiasach klamrowych zostają domyślnie przyjęte jako 0)
W C, o ile nic nie zmienili, nie możesz podać pustego nawiasu klamrowego (co najmniej 1 element), więc
int a[N] { 0 };