函数返回值是引用(引用当左值)
如果返回的是局部变量(栈上的) 引用,有可能会有问题
#include <iostream> using namespace std; int getAA1(void) { int a; a = 10; return a; } //返回a的本身 返回a的一个副本 10 int& getAA2(void) { int a; //如果返回的是局部变量(栈上的) 引用,有可能会有问题 a = 10; return a; } int* getAA3(void) { int a; a = 10; return &a; } int main(void) { int a1 = 0; int a2 = 0; a1 = getAA1(); a2 = getAA2(); int &a3 = getAA2();//若返回栈变量 不能成为其它引用的初始值 //a3是一个引用,相当于getAA2()函数中a的别名。 //printf("a1:%d a2:%d a3:%d\n", a1, a2, a3); printf("a1:%d \n", a1); printf("a2:%d \n", a2); printf("a3:%d \n", a3); //a3引用的是一个局部变量,运行完已经不存在了。 return 0; }
运行结果:
int j(void) { static int a = 10; a++; return a; } int& j1(void) { static int a = 10; a++; return a; } //若返回静态变量或全局变量 // 可以成为其他引用的初始值 // 即可作为右值使用,也可作为左值使用 int main(void) { int a1 = 10; int a2 = 20; a1 = j(); a2 = j1(); int &a3 = j1(); printf("a1:%d \n", a1); printf("a2:%d \n", a2); printf("a3:%d \n", a3); return 0; }
运行结果:
函数返回值当左值。
//函数当左值 //返回变量的值 int g1(void) { static int a = 10; a++; return a; //11 } //返回变量自身, 返回变量标识的内存空间 int& g2(void) { static int a = 10; a++; printf("a:%d \n", a); return a; } int main(void) { //g1() = 100; 11=100 g2() = 100; //函数返回值是一个引用,当左值。 g2(); int c1 = g1(); //函数返回值是一个值,当右值 int c2 = g2(); //函数返回值是一个引用,当右值。 printf("c1:%d \n", c1); printf("c2:%d \n", c2); return 0; }
运行结果:
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并,获取更多隐藏干货,QQ交流群:859800032 微信公众号:Crystal软件学堂
作者:Liu_Jing bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |