📜  如何从C++中的函数返回局部变量

📅  最后修改于: 2022-05-13 01:55:24.799000             🧑  作者: Mango

如何从C++中的函数返回局部变量

下面的文章讨论了返回在函数内部创建的局部变量的函数,这可以通过将指向该变量的指针从被调用函数返回到调用函数。

当您尝试像往常一样返回局部变量时会发生什么?

例如,在下面的代码中,当数组在函数内部创建并返回给调用者函数,它会抛出运行时错误,因为数组是在堆栈内存中创建的,因此一旦函数结束,它就会被删除。

C++
#include 
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;
}


C++
// C++ program for the above approach
#include 
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;
}


C++
#include 
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;
}


输出

Segmentation Fault (SIGSEGV)

如何从函数返回局部变量?



但是有一种方法可以使用指针访问函数的局部变量,通过创建另一个指向要返回的变量的指针变量并返回指针变量本身。

  • 返回局部变量:

C++

// C++ program for the above approach
#include 
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
  • 返回一个数组:

C++

#include 
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
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程