Ao trabalhar com vetores em C, é essencial respeitar os limites da estrutura. Se um vetor possui tamanho N, então seus índices válidos vão de 0 até N - 1.
Por exemplo, se declararmos:
int vetor[5];
as únicas posições válidas serão:
vetor[0], vetor[1], vetor[2], vetor[3], vetor[4]
Qualquer tentativa de acessar vetor[5], vetor[6] ou índices ainda maiores estará fora dos limites do vetor.
A linguagem C não realiza, automaticamente, a verificação desses limites. Isso significa que um código como o seguinte pode compilar:
int vetor[5] = {1, 2, 3, 4, 5};
printf("%d\n", vetor[7]);
Entretanto, esse acesso é inválido. O programa estará tentando ler uma posição de memória que não pertence ao vetor.
Esse tipo de situação caracteriza o chamado comportamento indefinido. Em termos práticos, isso significa que o resultado não é previsível: o programa pode parecer funcionar, pode imprimir um valor incoerente, pode falhar ou apresentar outros efeitos inesperados.
Por essa razão, o controle dos limites do vetor é responsabilidade do programador.
Outro ponto importante é lembrar que o nome do vetor, quando usado isoladamente, não representa um elemento específico da estrutura.
Observe o exemplo:
int vetor[10];
vetor = 5;
Esse código é inválido, pois um vetor não pode receber um valor inteiro dessa forma.
Já o trecho abaixo pode até compilar com aviso:
printf("%d\n", vetor);
Nesse caso, o nome do vetor está sendo interpretado de forma associada ao endereço inicial da estrutura na memória, e não como um elemento individual. Mais adiante, quando estudarmos ponteiros e memória, esse comportamento ficará mais claro.