c++ 引用 日期&时间
日期时间【点击进入看吧,没啥可后期拓展的】
引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
一、引用和指针的不同
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
二、创建引用
变量名称是变量附属在内存位置中的标签,可以把引用当成是变量附属在内存位置中的第二个标签。因此,可以通过原始变量名称或引用来访问变量的内容。
int i = ;
可以为 i 声明引用变量: int& r = i;
double& s = d;
& 读作引用。因此,第一个声明可以读作 "r 是一个初始化为 i 的整型引用",第二个声明可以读作 "s 是一个初始化为 d 的 double 型引用"。下面的实例使用了 int 和 double 引用:
#include <iostream> using namespace std; int main ()
{
// 声明简单的变量
int i;
double d; // 声明引用变量
int& r = i;
double& s = d; i = ;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl; d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s << endl; return ;
}
结果:
Value of i :
Value of i reference :
Value of d : 11.7
Value of d reference : 11.7
三、引用通常用于函数参数列表和函数返回值
(1)把引用作为参数
下面的实例使用了引用来实现引用调用函数
#include <iostream>
using namespace std; // 函数声明
void swap(int& x, int& y); int main ()
{
// 局部变量声明
int a = ;
int b = ; cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl; /* 调用函数来交换值 */
swap(a, b); cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl; return ;
} // 函数定义
void swap(int& x, int& y)
{
int temp;
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */ return;
}
结果:
交换前,a 的值:
交换前,b 的值:
交换后,a 的值:
交换后,b 的值:

以引用作为参数的函数,可以把变量传入,但不能传入常量。
#include <iostream>
using namespace std; int hls(int& a1, int& a2, int& b1, int& b2) //定义行列式函数
{
int temp;
temp=a1*b2-a2*b1;
return temp;
} int main()
{
int x1=; int x2=;
int y1=; int y2=; //定义矩阵
int result; //行列式运算结果
result=hls(x1,x2,y1,y2); //result=hls(11,9,15,14)会报错
cout << result << endl;
return ;
}
(2)把引用作为返回值
通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。C++ 函数可以返回一个引用,方式与返回一个指针类似。
当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。
#include <iostream>
using namespace std;
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues( int i )
{
return vals[i]; // 返回第 i 个元素的引用
}
// 要调用上面定义函数的主函数
int main ()
{
cout << "改变前的值" << endl;
for ( int i = ; i < ; i++ )
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
setValues() = 20.23; // 改变第 2 个元素
setValues() = 70.8; // 改变第 4 个元素
cout << "改变后的值" << endl;
for ( int i = ; i < ; i++ )
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
return ;
}
结果:
改变前的值
vals[] = 10.1
vals[] = 12.6
vals[] = 33.1
vals[] = 24.1
vals[] =
改变后的值
vals[] = 10.1
vals[] = 20.23
vals[] = 33.1
vals[] = 70.8
vals[] =
当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用
int& func() {
int q;
//! return q; // 在编译时发生错误
static int x;
return x; // 安全,x 在函数作用域外依然是有效的
}

补充:
1. int& r = i; 和 int r = i; 不同之处应该是内存的分配吧,后者会再开辟一个内存空间
#include <iostream> using namespace std; int main ()
{
int i;
int& r = i;
i = ;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl;
cout << "Addr of i: " << &i << endl;
cout << "Addr of r: " << &r << endl; int x;
int y = x;
x = ;
cout << "Value of x : " << x << endl;
cout << "Value of y : " << y << endl;
cout << "Addr of x: " << &x << endl;
cout << "Addr of y: " << &y << endl; return ;
}
结果:
Value of i :
Value of i reference :
Addr of i: 0x7fff59cda988
Addr of r: 0x7fff59cda988
Value of x :
Value of y :
Addr of x: 0x7fff59cda97c
Addr of y: 0x7fff59cda978
2.

3.


c++ 引用 日期&时间的更多相关文章
- 移动端lCalendar纯原生js日期时间选择器
网上找过很多的移动端基于zepto或jquery的日期选择器,在实际产品中也用过一两种,觉得都不太尽如人意,后来果断选择了H5自己的日期input表单,觉得还可以,至少不用引用第三方插件了,性能也不错 ...
- 令人头痛的ExtJS日期时间控件
1 缘由 Ext提供了日期.时间的控件,但没有将日期和时间组合在一起的控件.在网上搜索时,有前辈创建或重写了时间相关的类,并提供了源码.不得不说那位作者对 extjs 框架理解得很透彻,虽然不知道他当 ...
- 自定义EasyUI的datetimebox控件日期时间的显示格式(转)
工作中遇到的问题,在此记录一下. 需求:前台页面使用了EasyUI框架,在某一个html页面中要求datetimebox显示格式为年月日和小时,如图所示: 尝试过两种方法,分别如下: 第一种方法: d ...
- 【Flask】 使用Flask-Moment进行日期时间的管理
Flask-Moment Flask-Moment又是一个flask的扩展模块,用来处理时间日期等信息.用这个模块主要是考虑到两点,第一是为了让不同时区的用户看到的都是各自时区的实际时间,而不是服务器 ...
- 【转】Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))
Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...
- JDK8 新增的日期时间API
背景 JDK8中增加了一套全新的日期时间API,这里进行总结下,方便查询使用. 新的时间及日期API位于 java.time 包中,下面是一些关键类. Instant:代表的是时间戳. LocalDa ...
- Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))
Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...
- vue使用日期时间插件layDate
项目中需要用到日期时间插件,尝试用bootstrap.element的时间插件都各有各的报错,对于一个菜鸟来说真的是很痛苦啊.终于,最后用了layDate实现了需要的功能 最终效果: 使用步骤: 1. ...
- MySQL日期时间处理函数
-- MySQL日期时间处理函数SELECT NOW() FROM DUAL;-- 当前日期时间:2017-05-12 11:41:47-- 在MySQL里也存在和Oracle里类似的dual虚拟表: ...
随机推荐
- 第09课:【实战】Redis网络通信模块源码分析(2)
侦听 fd 与客户端 fd 是如何挂载到 EPFD 上去的 同样的方式,要把一个 fd 挂载到 EPFD 上去,需要调用系统 API epoll_ctl ,搜索一下这个函数名.在文件 ae_epoll ...
- DeepFaceLab更新至2019.12.23
本次更新主要是增加了脸图样本生成器,一般来说我们提取脸图之后会放到aligned文件夹里面,训练的时候会加载这些脸图,若是图片少还行,一旦图片太多加载效率低不说,同样会影响了训练效率.现在好了,我们只 ...
- 【BZOJ2752】【Luogu P2221】 [HAOI2012]高速公路
不是很难的一个题目.正确思路是统计每一条边被经过的次数,但我最初由于习惯直接先上了一个前缀和再推的式子,导致极其麻烦难以写对而且会爆\(longlong\). 推导过程请看这里. #include & ...
- Java-Web servlet控制器的引入
一.建包 二.建立实体类 参考二维表,考虑各个字段的名字.类型 private String id; private String name; private String address; publ ...
- jquery $(".classc",$(".classp"))的含义
jquery中有一种选择器的写法为:$(".classc",$(".classp")),注意,是$()中又嵌套了一个$(),这种写法的作用类似于$(" ...
- grunt-contrib-concat 合并任意文件
grunt-contrib-concat可用于合并任意文件(css\js\txt等) 安装插件:npm install grunt-contrib-concat --save-dev 参数: sepa ...
- Centos 由字符界面 init 3 切换图形界面 init 5
Centos6 和 Centos7 由字符界面切换成 图形界面方法不同,下面分别介绍. 一.Centos6 切换方法 yum -y install xorg* yum -y groupinstall ...
- C# 1.0(2002)
序言 C# 1可以看做2001年Java语言的升级版. 主要功能 类 结构 接口 事件 属性 委托 表达式 语句 特性 值类型和引用类型 装箱和拆箱 资料
- React-native 环境配置及项目创建
https://reactnative.cn/docs/next/getting-started.html 看到 安装 Android Studio 安装 Android Studio http:/ ...
- html5 和h5的区别
html5 是公认的web开发的html规范,是一系列关于html的标准,它就好比是国家的法律,比如未成年不准进网吧,网吧要是允许未成年人进入,国家就要对网吧和未成年人进行处罚和教育.同样的,你写的h ...