函数返回值当引用目录
- 一.若返回变量为栈变量
- 1.例子
- 2.不能成为其他引用的初始值
- 3.不能作为左值
- 二.若返回变量为静态变量或全局变量
- 1.列子
- 2.即可左值也可右值
- 三.若返回变量为形参
- 1.普通形参
- 2.引用形参
- 四.结论
一.若返回变量为栈变量
1.例子
返回的是局部变量的引用,这里用的二级指针可以将i的地址拿到函数外.
2.不能成为其他引用的初始值
运行结果:
因为引用的是局部变量,当我调用一下其他函数时,原来指向地址的值就发生了变化.
原因是局部变量调用完应该是自动释放了,但是我demo1分配的栈空间就是刚刚释放的,刚好是原来的地址,所有我这里调用值就发生了变化.
dem1什么也没有做,只是调用一下.
3.不能作为左值
运行结果:
结果一样,也发生了变化!
二.若返回变量为静态变量或全局变量
1.列子
static只初始化一次变量哦.
2.即可左值也可右值
运行结果:
即使我调用了demo1,结果函数没有改变.
三.若返回变量为形参
1.普通形参
跟局部变量一样,不能作为左值和初始化引用.
2.引用形参
左右值都可以作.
四.结论
- 要看返回值引用的变量的生命周期
- 像局部就不能对其作为左值和其他引用的初始值,但是可以返回给普通变量赋值
- 像全局的就可以作为左值和右值