我们知道,函数中创建的局部变量是保存在栈区的,函数执行完毕后,对应空间内的变量会自动销毁,所以是不能直接返回局部变量的。
那如果要返回呢,方法如下:
- 可以在该局部变量前加上static,这样该变量不再是局部变量,而是存储在静态区的变量,程序执行完毕才会销毁。
- 在函数外预先定义一个存放返回结果的变量。
除了不能返回局部变量外,局部变量的指针、引用(C++内部也是指针实现)等,也是不能返回的。
但是在C++中,为何又能在函数中返回看似是局部变量的vector呢?
vector<int> getSequence(int num){
vector<int> sequence;
for(int i=0;i<10;i++){
sequence.push_back(i+num);
}
return sequence;
}
这是由于vector并不存放在栈区,而是存放在堆区。所以虽然在函数内创建,但都不能算是个局部变量。
总结:vector与动态数组性质相同,具体数据存放堆区,变量名存放在栈区,变量名存放的是堆区的首地址。