Como Passar Arrays 1D e 2D para Funções em C – Um Guia Prático
Como Passar Arrays 1D e 2D para Funções em C
Este tutorial explica como passar arrays inteiros — tanto unidimensionais quanto multidimensionais — para funções em C, com exemplos de código claros e dicas de boas práticas.
Em C, um nome de array decai para um ponteiro quando passado para uma função, permitindo que a função opere nos dados originais sem copiá-los. Entender esse comportamento é essencial para código eficiente e sustentável.
Passando Elementos Individuais do Array
Passar um único elemento é idêntico a passar qualquer tipo primitivo.
Exemplo 1: Passar Elementos Individuais do Array
#include <stdio.h> void display(int age1, int age2) { printf("%d\n", age1); printf("%d\n", age2); } int main() { int ageArray[] = {2, 8, 4, 12}; // Passar segundo e terceiro elementos para display() display(ageArray[1], ageArray[2]); return 0; }
Saída
8 4
Aqui passamos ageArray[1] e ageArray[2] como variáveis ordinárias. A função os recebe por valor, então o array original permanece inalterado.
Passando Arrays Unidimensionais Inteiros
Para passar um array inteiro para uma função, simplesmente forneça o nome do array. O protótipo da função deve indicar um parâmetro de array, mas o tamanho real pode ser omitido. O compilador trata o parâmetro como um ponteiro para o primeiro elemento.
Exemplo 2: Calcular Soma de um Array
#include <stdio.h> float calculateSum(float num[]); int main() { float result, num[] = {23.4, 55, 22.6, 3, 40.5, 18}; // Passar o array inteiro para calculateSum() result = calculateSum(num); printf("Resultado = %.2f", result); return 0; } float calculateSum(float num[]) { float sum = 0.0; for (int i = 0; i < 6; ++i) { sum += num[i]; } return sum; }
Saída
Resultado = 162.50
A assinatura da função float calculateSum(float num[]) diz ao compilador que num é um ponteiro para um array de float. O loop processa o array no local sem copiar.
Passando Arrays Multidimensionais
Arrays multidimensionais seguem o mesmo princípio: o nome do array decai para um ponteiro para a primeira linha. No entanto, o compilador deve saber o tamanho de toda dimensão exceto a primeira. Isso é necessário para que ele possa calcular os offsets de memória corretos.
Exemplo 3: Passar um Array Bidimensional
#include <stdio.h> void displayNumbers(int num[2][2]); int main() { int num[2][2]; printf("Digite 4 números:\n"); for (int i = 0; i < 2; ++i) { for (int j = 0; j < 2; ++j) { scanf("%d", &num[i][j]); } } // Passar o array bidimensional para uma função displayNumbers(num); return 0; } void displayNumbers(int num[2][2]) { printf("Exibindo:\n"); for (int i = 0; i < 2; ++i) { for (int j = 0; j < 2; ++j) { printf("%d\n", num[i][j]); } } }
Saída
Digite 4 números: 2 3 4 5 Exibindo: 2 3 4 5
O protótipo da função void displayNumbers(int num[2][2]) declara um array inteiro 2×2. Ao chamar a função, simplesmente passamos num; o compilador lida automaticamente com a conversão de ponteiro.
Note que você pode omitir a dimensão da linha mas deve especificar o tamanho da coluna: int num[][2] é válido, enquanto o tamanho da coluna é essencial para cálculo de endereço.
Importante: C permite passar arrays para funções, mas não suporta retornar arrays de funções diretamente. Use ponteiros ou estruturas se precisar retornar dados complexos.
Linguagem C
- Dominando Arrays em C#: Declaração, Inicialização e Operações
- Tipos de Dados em C Explicados: int, float, char e Mais – Guia Completo
- Dominando a Declaração Pass em Python: Guia Prático
- Dominando Argumentos de Funções em Python: Parâmetros Posicionais, Nomeados e Padrão
- Closures em Python Explicados: Como Funções Aninhadas Capturam Variáveis
- Uso Eficiente de Memória com Bit Fields em C
- Dominando I/O de Arquivos em C: Criando, Abrindo e Gerenciando Arquivos
- Dominando Argumentos Variáveis em C: Guia Prático
- Entendendo Polimorfismo em C++: Guia Prático
- Métodos em C#: Definindo, Chamando e Usando Funções