Tamanho de array em C

Olá, estou fazendo um tutorial de C e queria entender como o código abaixo funciona.

Pelo que eu entendi int grades(1); declara uma array de tamanho 2, mesmo assim é possível declarar grades(2) = 90; sem problemas, que estaria em uma posição maior que o tamanho declarado.

Quando experimento printf("%d", grades(3)) sem ter ter declarado um valor para a posição o resultado são uns números aleatórios que eu não entendo. Suponho que esteja imprimindo espaços não alocados na memoria. Isso?

Achei que declarar e imprimir tamanhos maiores que o declarado inicialmente fossem resultar em erros.
Como funciona o tipo array em C?

#include <stdio.h>

int main() {
  int grades(1);
  int average;

  grades(0) = 80;
  grades(1) = 85;
  grades(2) = 90;

  average = (grades(0) + grades(1) + grades(2)) / 3;
  printf("The average of the 3 grades is: %d", average);

  return 0;
}