Restituire Array dalla Funzione
Scorri per mostrare il menu
Esiste una limitazione fondamentale: solo gli array dinamici possono essere restituiti dalle funzioni. Questa restrizione deriva dall'ambito locale delle funzioni; gli array statici creati all'interno di una funzione sono accessibili solo all'interno di quella funzione.
Se si tenta di restituire un array creato localmente, si incontrerà una limitazione dovuta all'ambito della funzione (si cercherà di restituire l'indirizzo di variabili inesistenti, il che porterà a un errore).
Restituzione di un array dinamico
A differenza delle variabili locali, che vengono deallocate quando una funzione termina, la memoria dinamica allocata tramite new[] consente ai dati di sopravvivere oltre l'ambito della funzione in cui sono stati creati. Di conseguenza, è possibile accedere alle variabili create all'interno della funzione utilizzando i loro indirizzi.
Per restituire un array dinamico, è necessario utilizzare i seguenti specificatori di tipo nella firma della funzione:
dataType*per un array monodimensionale.dataType**per un array bidimensionale.
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; }
La funzione alloca dinamicamente memoria per un array di interi della dimensione specificata. Inizializza gli elementi dell'array con valori da 1 fino alla size dell'array. La funzione restituisce un puntatore al primo elemento dell'array di interi allocato dinamicamente che può ora essere utilizzato nel blocco 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; }
Il principio è lo stesso del ritorno di un array monodimensionale: l'unica differenza è che dobbiamo restituire un puntatore all'array di puntatori utilizzando lo specificatore di tipo int** per restituire l'array bidimensionale.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione