引用之函数返回值 函数的返回值为引用类型《三》
一:
可以把函数定义为引用类型,这时函数的返回值即为某一变量的引用(别名),因此,它相当于返回了一个变量,所以可对其返回
值进行赋值操作。这一点类同于函数的返回值为指针类型。 由于函数调用返回的引用类型是在函数运行结束后产生的,所以函数不
能返回自动变量和形参。返回的变量的引用,这个变量必须是全局变量或静态局部变量,即存储在静态区中的变量。
看个例子:
/*
* main.cpp
*
* Created on: 2012-9-18
* Author: china
*
* 注意:由于函数调用返回的引用类型是在函数运行结束后产生的,所以函数不能返回自动变量和形参。
返回的变量的引用,这个变量必须是全局变量或静态局部变量,即存储在静态区中的变量。
*
*/
#include <iostream>
using namespace std;
int a = 4;
//函数返回a的引用,即a的别名!!!!
int &f(int x) {
//static int a=4; 和全局变量的效果一样哦
a = a + x;
return a;
}
int main(int argc, char **argv) {
int t = 5;
cout << f(t) << endl;//输出 9 (a=9) t=5
f(t) = 20;//先调用,再赋值 a=20 t=5
cout << f(t) << endl;//输出25 (a=25) t=5
t = f(t);//先调用,再赋值 a=30,t=30
cout << f(t) << endl;//60
return 0;
}
(二):我们都知道,函数作为一种程序实体,它有名字、类型、地址和存储空间,一般说来函数不能作为左值(即函数不能放在
赋值号左边)。但如果将函数定义为返回引用类型,因为返回的是一个变量的别名,就可以将函数放在左边,即给这个变量赋值。
eg:
eg:/*
* main.cpp
*
* Created on: 2012-9-18
* Author: china
*
* 我们都知道,函数作为一种程序实体,它有名字、类型、地址和存储空间,
* 一般说来函数不能作为左值(即函数不能放在赋值号左边)。但如果将函数定义为返回引用类型,
* 因为返回的是一个变量的别名,就可以将函数放在左边,即给这个变量赋值。
*
*/
#include <iostream>
using namespace std;
int &f(int &x);
int main(int argc, char **argv) {
int a=3;
cout<<f(a)<<endl;//a=4,输出3
f(a)=20;//先调用后赋值a=5
a+=5;//a=10
cout<<f(a)<<endl;//10
a=f(a);//a=11,先调用后赋值
cout<<f(a)<<endl;//11,a=12
return 0;
}
int &f(int &x)
{
static int t=2;
t=x++;
return t;
}
引用之函数返回值 函数的返回值为引用类型《三》相关推荐
- C++11 右值引用与常量左值引用保存临时变量(函数返回值)的底层分析
右值引用保存临时变量(函数返回值)的问题 :临时变量是右值 1.普通变量接收函数返回值: 2.右值引用变量接收函数返回值: 3.用const int& 和右值引用是一样的效果,只是const ...
- 如何引用传递参数从一个函数中得到多个返回值
2019独角兽企业重金招聘Python工程师标准>>> 通过"引用"传递参数的方法从一个函数中得到多个返回值.就像三元运算符一样,大部分受过正式编程训练的程序员都 ...
- Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法
函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...
- C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)
1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...
- Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]
1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...
- 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...
- C语言函数怎么像python那样返回多个值?(三种方法:1、设置全局变量 2、传递指针 3、使用结构体返回不同类型的数据)
引用文章:c语言函数可不可以返回多个值 文章目录 方法一:设置全局变量 例如:利用一个函数求出正方形的周长和面积. 方法二:使用数组名或指针作为函数的形参 实例2:编写函数求一维整形数组的最大值与最小 ...
- go函数详解:函数定义、形参、返回值定义规范、函数内存分析、不支持重载、支持可变参数、基本数据类型和数组默认都是值传递的、支持自定义数据类型、函数返回值命名
引入 [1]为什么要使用函数: 提高代码的复用型,减少代码的冗余,代码的维护性也提高了 [2]函数的定义: 为完成某一功能的程序指令(语句)的集合,称为函数. [3]基本语法 func 函数名(形参列 ...
- java函数返回多个值_深入理解被调函数与主调函数之间的传值、传址、值返回、址返回...
函数的英文是function,有功能的意思,函数的作用在于合理分配功能,增强程序的可读性.合理分解功能,降低程序的复杂性.隐藏函数内部的数据和实现,尽可能将问题局限于函数本身. 函数可以理解为一种功能 ...
- 函数的返回竟然能作为左值
函数返回尽然能作为左值 函数参数里的二级指针 函数参数里的(数据类型引用) 经典不是优雅 #include <iostream> #include <iomanip> ...
最新文章
- c++链表形参丢失_LeetCode 例题精讲 | 01 反转链表:如何轻松重构链表
- SQL CASE WHEN用法
- pkill 和 pgrep总结
- sysfs cannot create duplicate filename问题
- python pandas爬取网页成绩表格,计算各个类别学分
- spring mvc DispatcherServlet解读
- 【算法竞赛学习】二手车交易价格预测-Task2数据分析
- 图片大_2020跨年图片 元旦快乐祝福图片 2019再见2020你好图片大全 新年图片
- linux上的定时器上的jiffies,Linux kernel -- 定时器/jiffies
- Java学习笔记:创建线程的两种方法
- 计算机专业认识实习目的,计算机专业实习目的与意义
- 怎么把Word转PDF格式?分享几种好用的转换方法
- Linux_常用的磁盘列阵(RAID)
- Multipart/form-data文件上传简介
- 5步教你成功求职进入BAT
- python使用opencv如何保存图片_OpenCV Python 保存图片
- select和select1
- 红黑树,超强动静图详解,简单易懂
- 远程监控电脑屏幕用什么软件?
- mysql mklink_windows系统下的文件夹链接功能mklink/linkd
热门文章
- Hibernate之Inverse的用法
- 【开发问题记录①】关于滑动CollectionView时ContentSize变化的问题
- 七、MySQL中的字符集 - 系统的撸一遍MySQL
- 【转】java获取当前路径的几种方法
- python 中类与对象
- [ZZ]HOW TO:使用 Visual Studio .NET 将 SQL Server 2000 存储过程添加到 Visual SourceSafe
- 2016年最值得关注的16个网页设计趋势
- Fort.js – 时尚、现代的进度提示效果
- 谷歌有情怀!谷歌开放大规模音频数据集 AudioSet
- SVM分类器(matlab)