日期时间【点击进入看吧,没啥可后期拓展的】

引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

一、引用和指针的不同

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

二、创建引用

变量名称是变量附属在内存位置中的标签,可以把引用当成是变量附属在内存位置中的第二个标签。因此,可以通过原始变量名称或引用来访问变量的内容

  1. int i = ;
  2. 可以为 i 声明引用变量:
  3.  
  4. int& r = i;
  5. double& s = d;

& 读作引用。因此,第一个声明可以读作 "r 是一个初始化为 i 的整型引用",第二个声明可以读作 "s 是一个初始化为 d 的 double 型引用"。下面的实例使用了 int 和 double 引用:

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main ()
  6. {
  7. // 声明简单的变量
  8. int i;
  9. double d;
  10.  
  11. // 声明引用变量
  12. int& r = i;
  13. double& s = d;
  14.  
  15. i = ;
  16. cout << "Value of i : " << i << endl;
  17. cout << "Value of i reference : " << r << endl;
  18.  
  19. d = 11.7;
  20. cout << "Value of d : " << d << endl;
  21. cout << "Value of d reference : " << s << endl;
  22.  
  23. return ;
  24. }

结果:

  1. Value of i :
  2. Value of i reference :
  3. Value of d : 11.7
  4. Value of d reference : 11.7

三、引用通常用于函数参数列表和函数返回值

 (1)把引用作为参数

下面的实例使用了引用来实现引用调用函数

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // 函数声明
  5. void swap(int& x, int& y);
  6.  
  7. int main ()
  8. {
  9. // 局部变量声明
  10. int a = ;
  11. int b = ;
  12.  
  13. cout << "交换前,a 的值:" << a << endl;
  14. cout << "交换前,b 的值:" << b << endl;
  15.  
  16. /* 调用函数来交换值 */
  17. swap(a, b);
  18.  
  19. cout << "交换后,a 的值:" << a << endl;
  20. cout << "交换后,b 的值:" << b << endl;
  21.  
  22. return ;
  23. }
  24.  
  25. // 函数定义
  26. void swap(int& x, int& y)
  27. {
  28. int temp;
  29. temp = x; /* 保存地址 x 的值 */
  30. x = y; /* 把 y 赋值给 x */
  31. y = temp; /* 把 x 赋值给 y */
  32.  
  33. return;
  34. }

结果:

  1. 交换前,a 的值:
  2. 交换前,b 的值:
  3. 交换后,a 的值:
  4. 交换后,b 的值:

 以引用作为参数的函数,可以把变量传入,但不能传入常量。

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int hls(int& a1, int& a2, int& b1, int& b2) //定义行列式函数
  5. {
  6. int temp;
  7. temp=a1*b2-a2*b1;
  8. return temp;
  9. }
  10.  
  11. int main()
  12. {
  13. int x1=; int x2=;
  14. int y1=; int y2=; //定义矩阵
  15. int result; //行列式运算结果
  16. result=hls(x1,x2,y1,y2); //result=hls(11,9,15,14)会报错
  17. cout << result << endl;
  18. return ;
  19. }

 (2)把引用作为返回值

通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。C++ 函数可以返回一个引用,方式与返回一个指针类似。

当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
  6.  
  7. double& setValues( int i )
  8. {
  9. return vals[i]; // 返回第 i 个元素的引用
  10. }
  11.  
  12. // 要调用上面定义函数的主函数
  13. int main ()
  14. {
  15.  
  16. cout << "改变前的值" << endl;
  17. for ( int i = ; i < ; i++ )
  18. {
  19. cout << "vals[" << i << "] = ";
  20. cout << vals[i] << endl;
  21. }
  22.  
  23. setValues() = 20.23; // 改变第 2 个元素
  24. setValues() = 70.8; // 改变第 4 个元素
  25.  
  26. cout << "改变后的值" << endl;
  27. for ( int i = ; i < ; i++ )
  28. {
  29. cout << "vals[" << i << "] = ";
  30. cout << vals[i] << endl;
  31. }
  32. return ;
  33. }

结果:

  1. 改变前的值
  2. vals[] = 10.1
  3. vals[] = 12.6
  4. vals[] = 33.1
  5. vals[] = 24.1
  6. vals[] =
  7. 改变后的值
  8. vals[] = 10.1
  9. vals[] = 20.23
  10. vals[] = 33.1
  11. vals[] = 70.8
  12. vals[] =

当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用

  1. int& func() {
  2. int q;
  3. //! return q; // 在编译时发生错误
  4. static int x;
  5. return x; // 安全,x 在函数作用域外依然是有效的
  6. }

补充:

1.     int& r = i; 和 int r = i; 不同之处应该是内存的分配吧,后者会再开辟一个内存空间 

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main ()
  6. {
  7. int i;
  8. int& r = i;
  9. i = ;
  10. cout << "Value of i : " << i << endl;
  11. cout << "Value of i reference : " << r << endl;
  12. cout << "Addr of i: " << &i << endl;
  13. cout << "Addr of r: " << &r << endl;
  14.  
  15. int x;
  16. int y = x;
  17. x = ;
  18. cout << "Value of x : " << x << endl;
  19. cout << "Value of y : " << y << endl;
  20. cout << "Addr of x: " << &x << endl;
  21. cout << "Addr of y: " << &y << endl;
  22.  
  23. return ;
  24. }

结果:

  1. Value of i :
  2. Value of i reference :
  3. Addr of i: 0x7fff59cda988
  4. Addr of r: 0x7fff59cda988
  5. Value of x :
  6. Value of y :
  7. Addr of x: 0x7fff59cda97c
  8. Addr of y: 0x7fff59cda978

2.

3.

c++ 引用 日期&时间的更多相关文章

  1. 移动端lCalendar纯原生js日期时间选择器

    网上找过很多的移动端基于zepto或jquery的日期选择器,在实际产品中也用过一两种,觉得都不太尽如人意,后来果断选择了H5自己的日期input表单,觉得还可以,至少不用引用第三方插件了,性能也不错 ...

  2. 令人头痛的ExtJS日期时间控件

    1 缘由 Ext提供了日期.时间的控件,但没有将日期和时间组合在一起的控件.在网上搜索时,有前辈创建或重写了时间相关的类,并提供了源码.不得不说那位作者对 extjs 框架理解得很透彻,虽然不知道他当 ...

  3. 自定义EasyUI的datetimebox控件日期时间的显示格式(转)

    工作中遇到的问题,在此记录一下. 需求:前台页面使用了EasyUI框架,在某一个html页面中要求datetimebox显示格式为年月日和小时,如图所示: 尝试过两种方法,分别如下: 第一种方法: d ...

  4. 【Flask】 使用Flask-Moment进行日期时间的管理

    Flask-Moment Flask-Moment又是一个flask的扩展模块,用来处理时间日期等信息.用这个模块主要是考虑到两点,第一是为了让不同时区的用户看到的都是各自时区的实际时间,而不是服务器 ...

  5. 【转】Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))

    Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...

  6. JDK8 新增的日期时间API

    背景 JDK8中增加了一套全新的日期时间API,这里进行总结下,方便查询使用. 新的时间及日期API位于 java.time 包中,下面是一些关键类. Instant:代表的是时间戳. LocalDa ...

  7. Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))

    Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...

  8. vue使用日期时间插件layDate

    项目中需要用到日期时间插件,尝试用bootstrap.element的时间插件都各有各的报错,对于一个菜鸟来说真的是很痛苦啊.终于,最后用了layDate实现了需要的功能 最终效果: 使用步骤: 1. ...

  9. MySQL日期时间处理函数

    -- MySQL日期时间处理函数SELECT NOW() FROM DUAL;-- 当前日期时间:2017-05-12 11:41:47-- 在MySQL里也存在和Oracle里类似的dual虚拟表: ...

随机推荐

  1. Elasticsearch在Centos 7上的安装与配置

    https://segmentfault.com/a/1190000011899522 https://blog.csdn.net/xxxxxx91116/article/details/171362 ...

  2. 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 ...

  3. vue history模式下的微信支付,及微信支付授权目录的填写,处理URL未注册

    微信公众号配置网页授权域名:填写网址域名 微信开发者平台配置url: 访问url:http://www.baidu.com/pay/ment 支付授权目录:http://www.baidu.com/p ...

  4. js 百分比显示页面加载进度

    做东西遇到显示页面百分比的加载进度,不过里面的图片较多,看了别人的代码,才想到可以通过图片的加载显示加载的百分比,做一下笔记: html: <span id="percent" ...

  5. Acwing-277-饼干(DP)

    链接: https://www.acwing.com/problem/content/279/ 题意: 圣诞老人共有M个饼干,准备全部分给N个孩子. 每个孩子有一个贪婪度,第 i 个孩子的贪婪度为 g ...

  6. 遍历文件夹 DirectoryInfo类

    该类有三个方法: GetDirectories()  当前目录的子目录 GetFiles()   当前目录的文件列表 GetFileSystemInfos()  当前目录的文件.子目录,返回强类型Fi ...

  7. Java类路径的问题

    下面是eclipse中的文件组织形式. 下面是硬盘中文件的组织形式: src:中就是自己编写的没有编译的代码. target中是编译的Java中的class文件和一些不用编译的文件.这样也就明白了为什 ...

  8. Linux命令-文件管理(二)

    Linux命令-文件管理(二) Linux gitview命令 Linux gitview命令用于观看文件的内容,它会同时显示十六进制和ASCII格式的字码. 语法:gitview [-bchilv] ...

  9. LeetCode 第 3 题:无重复字符的最长子串(滑动窗口)

    LeetCode 第 3 题:无重复字符的最长子串 (滑动窗口) 方法:滑动窗口 滑动窗口模板问题:右指针先走,满足了一定条件以后,左指针向前走,直到不满足条件. 特点:左右指针的方向是一致的,并且是 ...

  10. apache的httpclient进行http的交互处理

    使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclient源码 ...