如何从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 等的准备工作,请参阅完整的面试准备课程。