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虚拟表: ...
随机推荐
- Elasticsearch在Centos 7上的安装与配置
https://segmentfault.com/a/1190000011899522 https://blog.csdn.net/xxxxxx91116/article/details/171362 ...
- MySQL显示ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)解决方法
MySQL显示ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)解决方法 2.4K 解决方法: 第一步cd ...
- vue history模式下的微信支付,及微信支付授权目录的填写,处理URL未注册
微信公众号配置网页授权域名:填写网址域名 微信开发者平台配置url: 访问url:http://www.baidu.com/pay/ment 支付授权目录:http://www.baidu.com/p ...
- js 百分比显示页面加载进度
做东西遇到显示页面百分比的加载进度,不过里面的图片较多,看了别人的代码,才想到可以通过图片的加载显示加载的百分比,做一下笔记: html: <span id="percent" ...
- Acwing-277-饼干(DP)
链接: https://www.acwing.com/problem/content/279/ 题意: 圣诞老人共有M个饼干,准备全部分给N个孩子. 每个孩子有一个贪婪度,第 i 个孩子的贪婪度为 g ...
- 遍历文件夹 DirectoryInfo类
该类有三个方法: GetDirectories() 当前目录的子目录 GetFiles() 当前目录的文件列表 GetFileSystemInfos() 当前目录的文件.子目录,返回强类型Fi ...
- Java类路径的问题
下面是eclipse中的文件组织形式. 下面是硬盘中文件的组织形式: src:中就是自己编写的没有编译的代码. target中是编译的Java中的class文件和一些不用编译的文件.这样也就明白了为什 ...
- Linux命令-文件管理(二)
Linux命令-文件管理(二) Linux gitview命令 Linux gitview命令用于观看文件的内容,它会同时显示十六进制和ASCII格式的字码. 语法:gitview [-bchilv] ...
- LeetCode 第 3 题:无重复字符的最长子串(滑动窗口)
LeetCode 第 3 题:无重复字符的最长子串 (滑动窗口) 方法:滑动窗口 滑动窗口模板问题:右指针先走,满足了一定条件以后,左指针向前走,直到不满足条件. 特点:左右指针的方向是一致的,并且是 ...
- apache的httpclient进行http的交互处理
使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclient源码 ...