Retornando Arrays da Função
Deslize para mostrar o menu
Existe uma limitação crucial: apenas arrays dinâmicos podem ser retornados de funções. Essa restrição ocorre devido ao escopo local das funções; arrays estáticos criados dentro de uma função são acessíveis somente dentro dessa função.
Se você tentar retornar um array criado localmente, encontrará uma limitação devido ao escopo da função (você tentará retornar o endereço de variáveis inexistentes, o que resultará em erro).
Retornando um array dinâmico
Diferente das variáveis locais, que são desalocadas quando a função termina, a memória dinâmica alocada usando new[] permite que os dados sobrevivam além do escopo da função onde foram criados. Como resultado, é possível acessar variáveis criadas dentro da função utilizando seus endereços.
Para retornar um array dinâmico, é necessário utilizar os seguintes especificadores de tipo na assinatura da função:
dataType*para array 1D.dataType**para array 2D.
main.cpp
12345678910111213141516171819#include <iostream> // Function to create and return a dynamic 1D array int* createArray(const int size) { int* arr = new int[size]; for (int i = 0; i < size; ++i) arr[i] = i + 1; // Example initialization return arr; } int main() { int size = 5; int* myArray = createArray(size); // Don't forget to delete the dynamically allocated memory delete[] myArray; }
A função aloca dinamicamente memória para um array de inteiros do tamanho especificado. Ela inicializa os elementos do array com valores de 1 até o size do array. A função retorna um ponteiro para o primeiro elemento do array de inteiros alocado dinamicamente que pode ser utilizado no bloco main().
main.cpp
1234567891011121314151617181920212223242526272829303132333435#include <iostream> // Function to create and return a dynamic 2D array int** createArray(const int rows, const int cols) { int** arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[cols]; for (int j = 0; j < cols; ++j) { arr[i][j] = i * cols + j + 1; // Example initialization } } return arr; } int main() { int rows = 3; int cols = 2; int** myArray = createArray(rows, cols); // Use the returned 2D array for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { std::cout << myArray[i][j] << " "; } std::cout << std::endl; } // Don't forget to delete the dynamically allocated memory for (int i = 0; i < rows; ++i) { delete[] myArray[i]; } delete[] myArray; return 0; }
O princípio é o mesmo de retornar um array unidimensional: a única diferença é que precisamos retornar um ponteiro para o array de ponteiros utilizando o especificador de tipo int** para retornar o array bidimensional.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo