Jak już inni napisali ten zapis jest niezbyt poprawny, a raczej nie zgodny ze standardami i nie do końca bezpieczny. Jeżeli wpiszesz zbyt dużą liczbę, to program najpewniej się wysypie.
Prawda jest taka, że ta pamięć będzie zaalokowana podczas działania programu. W komputerze istnieje specjalna struktura pamięci zwana stosem. Na stosie umieszczane są między innymi zmienne lokalne i argumenty funkcji. Jak pewnie wiesz istnieją również regiony pamięci, do których program nie ma dostępu.
Taka tablica zostanie umieszczona właśnie na stosie, ale pytasz skąd program będzie wiedział, ile pamięci zaalokować. Kompilator najpewniej umieści w kodzie procedurę 'dotykającą' pamięci, do której nie ma dostępu, ale która jest tuż nad szczytem stosu. Gdy program dotknie tej pamięci, to system operacyjny zrozumie, że to nie był jakiś błąd, ale że potrzeba więcej pamięci dla stosu i zaalokuje ci trochę dodatkowej pamięci w odpowiednim miejscu.
Dzięki temu będziesz miał miejsce w pamięci operacyjnej (konkretnie na stosie) na tablicę o nieznanej długości.