函数返回值当引用
Posted Respect@
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数返回值当引用相关的知识,希望对你有一定的参考价值。
函数返回值当引用
C++引用使用时的难点:
- 当函数返回值为引用时
若返回栈变量,不能成为其它引用的初始值,不能作为左值使用- 若返回静态变量或全局变量
可以成为其他引用的初始值
即可作为右值使用,也可作为左值使用
- 返回形参当引用
(注:C++链式编程中,经常用到引用,运算符重载专题)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int demo1() {
int i = 0;
//printf("i 的地址: %p, i=%d\\n", &i, i);
return i;
}
int &demo(int **addr) {
int i = 666;
*addr = &i;
printf("i 的地址: %p, i=%d\\n", &i, i);
return i;
}
int &demo_static(int **addr) {
static int i = 666;
*addr = &i;
printf("demo_static: i 的地址: %p, i=%d\\n", &i, i);
return i;
}
//3. 函数返回形参(普通参数)当引用
int &demo3(int var) {
var = 666;
return var;
}
//4. 函数返回形参(引用)当引用
int &demo4(int &var) {
var = 666;
return var;
}
int main(void) {
int *addr = NULL;
int ret = demo(&addr);
//第一种情况 函数返回局部变量引用不能成为其它引用的初始值
//int &i1 = demo(&addr);
//i1 = 888;
//printf("addr: %p i1=%d\\n", addr, i1);
//demo(&addr);
//demo1();
//printf("addr: %p i1=%d\\n", addr, i1);
//第二种情况 函数返回局部变量不能做为左值
/*demo(&addr) = 888;
printf("1. addr: %p value: %d\\n", addr, *addr);
demo1();
printf("2. addr: %p value: %d\\n", addr, *addr);
*/
//第三种情况 返回静态变量或全局变量可以成为左值或是其它引用的初始值
//demo_static(&addr) = 888;
int &i1 = demo_static(&addr);
i1 = 888;
printf("1. addr: %p value: %d\\n", addr, *addr);
demo1();
printf("2. addr: %p value: %d\\n", addr, *addr);
demo_static(&addr);
system("pause");
return 0;
}
以上是关于函数返回值当引用的主要内容,如果未能解决你的问题,请参考以下文章