理解:不能返回局部变量的引用

#include <iostream>
 
int& Test(int i) {
    int j = 100;
    int &ji = j;
    return ji;
}
 
void echo() {
    std::cout << "hello world." << std::endl;
}
 
int main() {
    int &tmp = Test(10);
    std::cout << tmp << std::endl;
 
    echo();
    std::cout << tmp << std::endl;
 
    return 0;
}
复制代码

输出结果:ios

100
hello world.
0
复制代码

分析:c++

所谓不能返回局部变量,是指局部变量在栈空间中分配内存,函数返回时栈指针回退,当主调函数继续调用其它被调函数时,
栈指针上移,上一次函数调用所分配的空间会被本次调用覆盖,若是此时再引用原来的局部变量就会出现不可预见的结果。
(详细能够参考论坛:http://bbs.csdn.net/topics/340148806)

其实函数调用结束,栈并不必定当即销毁,若是调用结束,主调函数又去调用其余函数,这时栈数据就会被销毁了.
复制代码

返回引用:bash

const string &mainp(const string &s) {
     string ret = s;
     return ret
}
复制代码

概念:const string & mainp()返回引用不是看return返回什么而是看函数的返回类型,所以这里是返回局部变量的引用。函数

引用是指一个变量的别名,其本质上其实也是指针,只是不能改变其指向的地址而已。ui

相关文章
相关标签/搜索