Teste você mesmo: dentro de uma função sizeof(a) dá o tamanho do ponteiro
Regra prática: sempre passe o tamanho como argumento separado
Pule arrays 2D por enquanto — domine os 1D primeiro
💡 Dica: em void f(int a[], int n), int a[] é só outra forma de escrever int *a. A função chamada não consegue ver o tamanho original do array.
Passando um Array para uma Função
Passar um array para uma função usa uma sintaxe de parâmetro um pouco incomum.
// Duas formas equivalentes de parametrointsumArray(int a[], int n) { ... }
intsumArray(int *a, int n) { ... }
intmain(void) {
int scores[5] = {80,65,92,78,88};
int total = sumArray(scores, 5); // passa o nome do array (sem &)printf("%d\n", total);
}
intsumArray(int a[], int n) {
int s = 0;
for(int i=0; i<n; i++) s += a[i];
return s;
}
Tamanho do array: a função não tem como saber quantos elementos foram passados, então a convenção padrão é passar o tamanho como argumento extra.
Passagem por Valor vs Passagem por Referência
Tipos simples como int e double são passados como cópia do valor, mas arrays são passados como o endereço do primeiro elemento.
Passagem por valor comum (int, double)
Alterações no parâmetro dentro da função não afetam o chamador — só a cópia é modificada.
Passagem de array
Como o endereço é o que é passado, a[i] = 0 dentro da função também muda o array do chamador!
Não use sizeof(a) dentro da função! Dentro da função, o parâmetro de array é na verdade um ponteiro, então sizeof te dá apenas o tamanho de um ponteiro (geralmente 8 bytes).
intmain(void) {
int a[5];
printf("%ld\n", sizeof(a)); // 20 (5 elementos x 4 bytes)test(a);
}
voidtest(int a[]) {
printf("%ld\n", sizeof(a)); // 8 (tamanho de um ponteiro)!
}
Solução: sempre passe o tamanho como argumento separado, ou compartilhe como constante via macro / #define.
Experimente — Array como Argumento
arr_param.c
Saída
Clique em Executar…
💡 Experimente estas ideias também
Escreva uma função que preenche um array com zeros
Escreva uma função que retorna a soma dados um array e seu tamanho
Verifique se o chamador vê as mudanças que a chamada fez
Escreva uma função que recebe um array 2D (com a contagem de colunas no tipo)