El siguiente artículo analiza la forma de devolver una variable local creada dentro de una función , lo que se puede hacer devolviendo un puntero a la variable desde la función llamada a la función que llama .
¿Qué sucede cuando intenta devolver una variable local como de costumbre?
Por ejemplo, en el siguiente código, cuando la array se crea dentro de una función y se devuelve a la función que llama, arroja un error de tiempo de ejecución ya que la array se creó en la memoria de la pila y, por lo tanto, se elimina una vez que finaliza la función.
C++
#include <bits/stdc++.h> using namespace std; // Function to return an // array int* fun() { int arr[5] = { 1, 2, 3, 4, 5 }; return arr; } // Driver Code int main() { int* arr = fun(); // Will cause error cout << arr[2]; return 0; }
Producción
Segmentation Fault (SIGSEGV)
¿Cómo devolver una variable local desde una función?
Pero hay una manera de acceder a las variables locales de una función utilizando punteros, creando otra variable de puntero que apunte a la variable que se devolverá y devolviendo la variable de puntero en sí.
- Devolviendo una variable local:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to return // a pointer int* fun() { int x = 20; int* ptr = &x; return ptr; } // Driver Code int main() { int* arr = fun(); cout << *arr; return 0; }
20
Nota: aquí, los punteros funcionan porque las variables normales se almacenan en la pila que se destruye después de que finaliza la función. Pero, los punteros se almacenan en el montón y permanecen incluso después de que termina la llamada divertida. Entonces, podemos acceder al valor.
- Devolviendo una array:
C++
#include <bits/stdc++.h> using namespace std; // Function to return an // array int* fun() { int arr[5] = { 1, 2, 3, 4, 5 }; int *ptr = arr; return ptr; } // Driver Code int main() { int* arr = fun(); cout << arr[2]; return 0; }
3