Uma das principais vantagens do uso de funções é a possibilidade de organizar melhor o código, promovendo reutilização e modularização. Nesse contexto, surge uma questão importante: como trabalhar com arrays (vetores e matrizes) em conjunto com funções?

Nesta seção, veremos como:

7.1 Passando arrays como parâmetros

Em C, existem diferentes formas de declarar um vetor como parâmetro de uma função:

void funcao(int vetor[10]); // vetor com tamanho definido
void funcao(int vetor[]);   // vetor sem tamanho explícito
void funcao(int* vetor);    // ponteiro para inteiro

Do ponto de vista prático, essas três formas são equivalentes em termos de execução. Em todos os casos, o que é passado para a função é o endereço do primeiro elemento do vetor.

Essa característica evita a cópia de todos os elementos do array, tornando a execução mais eficiente.

Efeito da passagem por referência

Como consequência desse comportamento, qualquer modificação realizada no vetor dentro da função será refletida fora dela.

void altera(int v[]) {
    v[0] = 100;
}

<aside> ⚠️

Esse comportamento é fundamental em C e deve ser compreendido com atenção, pois pode ser tanto útil quanto fonte de erros.

</aside>

Matrizes como parâmetros

As matrizes seguem o mesmo princípio, com uma observação importante: é necessário informar o tamanho das dimensões internas (com exceção da primeira).

void funcao(int matriz[10][10]);
void funcao(int matriz[][10]);

A omissão da primeira dimensão é permitida, pois o compilador precisa conhecer apenas o tamanho das dimensões internas para calcular corretamente os endereços dos elementos.

A forma abaixo não será explorada neste momento:

void funcao(int** matriz);