网站中文域名续费是什么情况,菏泽网站制建设哪家好,陕西西安网站建设公司排名,wordpress 4.9.6 漏洞文章目录 一、函数返回值不能是 局部变量 的引用或指针1、函数返回值常用用法2、分析函数 普通返回值 做左值的情况3、分析函数 引用返回值 做左值的情况 函数返回值 能作为 左值 , 是很重要的概念 , 这是实现 链式编程 局部变量 的引用或指针1、函数返回值常用用法2、分析函数 普通返回值 做左值的情况3、分析函数 引用返回值 做左值的情况 函数返回值 能作为 左值 , 是很重要的概念 , 这是实现 链式编程 的基础 ; 一、函数返回值不能是 局部变量 的引用或指针 1、函数返回值常用用法 在 C 语言中 , 函数返回值 一般不会直接作为左值 , 因为 函数返回值是一个临时对象 , 一般情况下 都是当做右值使用 , 函数 返回的值都是 其 函数内部 局部变量 的 副本 , 这些 副本 不能作为左值参与赋值操作 ; 如果 是 外部通过 函数参数 传入到函数中的 指针 / 引用 , 没有必要返回 , 外部已经有了 , 你再返回一次意义不大 ; 2、分析函数 普通返回值 做左值的情况 函数普通返回值 不能做左值 ; 如果函数返回值是一个普通类型 , 那么返回的是 指定变量 的副本值 ;
下面的 fun 函数中 , 返回的是 静态变量 a 的值 ,
注意 : 这里返回的只是 a 的值 , 与静态变量无关 ;
是将 静态变量 a 复制一份 , 将复制后的 副本 10 这个数值返回了 ;
// 返回静态变量的值
int fun()
{static int a 10;return a;
}下面 的代码中 , 强行给 函数 返回的 普通变量 的 副本值 进行复制 , 报
error C2106: “”: 左操作数必须为左值错误信息 ; 错误代码示例 :
// 导入标准 io 流头文件
// 其中定义了 std 命名空间
#include iostream
// 导入 std 命名空间
using namespace std;#include stdio.h// 返回静态变量的值
int fun()
{static int a 10;return a;
}// 返回静态变量引用 , 也就是静态变量自身
int fun2()
{static int a 20;return a;
}int main() {fun() 100;return 0;
}编译运行报错信息 :
1------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1Hello.cpp
1Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(25,16): error C2106: “”: 左操作数必须为左值
1已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。生成: 成功 0 个失败 1 个最新 0 个跳过 0 个 3、分析函数 引用返回值 做左值的情况 函数引用返回值 可以做左值 ; 下面的 fun2 函数 , 返回 局部变量 中 创建的 静态变量 a 的引用 ,
相当于 将 静态变量 的 内存地址返回回去了 ,
该 静态变量的 内存地址 直到程序结束之前 都是有效的 , 因此该引用返回值 可以正常使用 ;
该 函数返回值 可以作为 正常的变量使用 , 既可以作为左值使用 , 又可以作为右值使用 ;
// 返回静态变量引用 , 也就是静态变量自身
int fun2()
{static int a 20;return a;
}在下面的代码中 , 先获取 fun2 函数的 引用返回值 , 将其打印出来 , 值为 10 ;
然后 再次调用 fun2 函数 , 直接将其作为左值 , 为其 赋值 100 , 然后打印 之前获取的 引用值 , 值也变为 100 ;
函数的引用返回值 可以作为 左值使用 ; 函数返回值 做 左值 代码示例 :
// 导入标准 io 流头文件
// 其中定义了 std 命名空间
#include iostream
// 导入 std 命名空间
using namespace std;#include stdio.h// 返回静态变量的值
int fun()
{static int a 10;return a;
}// 返回静态变量引用 , 也就是静态变量自身
int fun2()
{static int a 20;return a;
}int main() {// 先获取 fun2 函数返回的引用int a fun2();// 打印 引用 初始值printf(a %d\n, a);// 引用类型返回值 fun2() 100;// 打印修改后的效果printf(a %d\n, a);return 0;
}执行结果 :
a 20
a 100Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Debug\HelloWorld.exe (进程 17252)已退出代码为 0。
要在调试停止时自动关闭控制台请启用“工具”-“选项”-“调试”-“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .