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:
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.
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>
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);