Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Restituire Array dalla Funzione | Specifica dei Valori di Ritorno delle Funzioni
Funzioni in C++

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

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

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.

question mark

Quale affermazione sul ritorno di array dalle funzioni è corretta?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 3. Capitolo 2
some-alt