Como Passar Arrays para Funções em C++: Guia Prático
Como Passar Arrays para Funções em C++
Este guia explica como passar arrays uni e multidimensionais para funções em C++ usando exemplos reais de código.
Em C++, arrays podem ser fornecidos como argumentos de função, e você pode até retorná-los indiretamente via ponteiros. Entender a mecânica por trás da conversão de array para ponteiro e o impacto na memória e performance é essencial para escrever código eficiente.
Sintaxe para Passar Arrays como Parâmetros de Função
A declaração para uma função que aceita um array se parece com isto:
tipoRetorno nomeFuncao(tipoDado nomeArray[tamanhoArray]) { // corpo da função }
Exemplo:
int total(int notas[5]) { // implementação }
Aqui, notas é um array int de cinco elementos. Quando a função é chamada, apenas o nome do array (um ponteiro para seu primeiro elemento) é passado.
Exemplo 1: Passando Array Unidimensional para uma Função
#include <iostream> using namespace std; // Declara função para exibir notas void exibir(int m[5]) { cout << "Exibindo notas:" << endl; for (int i = 0; i < 5; ++i) { cout << "Aluno " << i + 1 << ": " << m[i] << endl; } } int main() { int notas[5] = {88, 76, 90, 61, 69}; exibir(notas); // Passa array pelo nome return 0; }
Saída
Exibindo notas: Aluno 1: 88 Aluno 2: 76 Aluno 3: 90 Aluno 4: 61 Aluno 5: 69
Pontos-chave:
- Chamar
exibir(notas);passa o endereço denotas[0]. - Dentro da função,
int m[5]é tratado comoint* m;, apontando para a mesma memória. - Modificar
m[i]altera o array originalnotas, ilustrando semântica de passagem por referência.
Passando Array Multidimensional para uma Função
Para arrays 2-D, você deve especificar o número de colunas (o tamanho da segunda dimensão) para que o compilador possa calcular deslocamentos de elementos.
Exemplo 2: Passando Array Bidimensional para uma Função
#include <iostream> using namespace std; void exibir(int n[][2]) { cout << "Exibindo valores:" << endl; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 2; ++j) { cout << "num[" << i << "][" << j << "]: " << n[i][j] << endl; } } } int main() { int num[3][2] = {{3, 4}, {9, 5}, {7, 1}}; exibir(num); return 0; }
Saída
Exibindo valores: num[0][0]: 3 num[0][1]: 4 num[1][0]: 9 num[1][1]: 5 num[2][0]: 7 num[2][1]: 1
Notas:
- A contagem de linhas (3) é opcional porque o compilador pode inferi-la da definição do array.
- Especificar o tamanho das colunas (
[][2]) é obrigatório para aritmética de ponteiros correta.
Arrays de dimensões superiores seguem a mesma regra: o tamanho de todas as dimensões, exceto a primeira, deve ser especificado.
Retornando um Array de uma Função
Funções não podem retornar um array inteiro diretamente. Em vez disso, retornam um ponteiro para o primeiro elemento, que pode referenciar um array alocado estaticamente, um array dinâmico ou um objeto temporário. Cuidado deve ser tomado para evitar retornar ponteiros para arrays locais (stack), o que resultaria em referências pendentes.
Exemplo (array estático):
int* obterArray() { static int arr[5] = {1, 2, 3, 4, 5}; return arr; // ponteiro para primeiro elemento }
Para alocação dinâmica, considere retornar um std::vector<T> para segurança e gerenciamento automático de memória.
Leitura adicional sobre manipulação segura de arrays em C++ é recomendada para código de produção.
Linguagem C
- Dominando Arrays Irregulares (Jagged Arrays) em C#: Declaração, Inicialização e Acesso
- Dominando Operadores em C++: Guia Completo com Exemplos Práticos
- Funções Amigas e Classes Amigas em C++: Dominando o Controle de Acesso
- Dominando Operadores em Programação C: Um Guia Abrangente
- Arrays em C++ Desmistificados: Declaração, Inicialização e Técnicas com Ponteiros
- Dominando Alocação Dinâmica de Arrays em C++: Guia Prático com Exemplos de Código
- Sobrecarga de Operadores em C++: Guia Prático com Exemplos de Código
- Funções em C++ Explicadas com Exemplos Práticos de Código
- Domine a Programação em C: Tutorial Completo para Iniciantes
- Dominando Sobrecarga em C++: Funções e Operadores Explicados