Cómo devolver variables locales desde una función en C++

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;
}
Producción

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;
}
Producción

3

Publicación traducida automáticamente

Artículo escrito por bhardwaj7 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *