C++引用(References)
1.C++引用:
引用就是某一变量(目标)的一个别名, 相当于同一个人有了两个名字, 无论喊哪一个名字实际上都是指的同一个人。 同样, 在引用上, 对引用的操作与对变量直接操作的效果完全一样, 因此, 修改引用的值就是在修改变量的值
从内存角度来说, 引用与变量名指向的都是同一处内存, 对引用地址的操作与对变量名地址的操作都是对同一处内存进行操作。 引用本身占用存储单元, 但是你没有办法从C++层面去访问到引用所占用的空间。
2.引用的声明:
类型标识符 &引用名 = 初始值 ;
& 为引用说明符, 表示该数据类型为引用类型
PS:在声明一个引用时必须对引用进行初始化, 因为引用一经声明便无法修改 int &rn ; //错, 未初始化
声明语句中的类型必须与初始值的变量类型一致int n = 10 ;double &rn = n ; //错, 声明的引用类型为double, 而初始值的类型为int
int main(){
int x=;
int &a=x; //建立x的引用
cout<<&a<<" "<<a<<" "<<*(&a)<<endl; //0xbfc662b8 10 10 int n=;
int *p=&n; //指向n的指针:指针的值存的是n的地址
cout<<p<<" "<<*p<<endl; //0xbfc662bc 10 int *&fp=p; //建立指针的引用:&fp引用存的是指针变量p的地址,
cout<<&fp<<" "<<fp<<" "<<*&fp<<endl; //0xbfc662c0 0xbfc662bc 0xbfc662bc int &r=*new int; //new开辟的无名内存建立引用
r=; //等效与int r=100;
cout<<&r<<" "<<r<<endl;
//销毁r开辟的内存可以用delete &r; }
3.引用使用的限制:
(1)不能建立数组的引用
(2)不能建立引用的引用
4.指针和引用的比较:
不同点:
1>. 指针可以被重新赋值, 而引用一经声明初始化便无法修改 ;
2>. 指针可以为空(NULL), 而引用不能 ;
3>. 指针在声明时可以不进行初始化, 而引用不能 ;
相同点:
都能直接对实体进行操作。
C++引用(References)的更多相关文章
- (转) 学习C++ -> 引用( References )
学习C++ -> 引用( References ) 一.引用的介绍 引用就是某一变量(目标)的一个别名, 相当于同一个人有了两个名字, 无论喊哪一个名字实际上都是指的同一个人. 同样, 在 ...
- 超越 JSON: Spearal 序列化协议简介
Spearal 是一个新的开源的序列化协议,这个协议旨在初步替换JSON 将HTML和移动应用连接到Java的后端. Spearal的主要目的是提供一个序列协议,这个协议即使是在端点间传输的复杂的 ...
- java面试题总汇
coreJava部分 7 1.面向对象的特征有哪些方面? 7 2.作用域public,private,protected,以及不写时的区别? 7 3.String 是最基本的数据类型吗? 7 4.fl ...
- 重新介绍 JavaScript
简介 为什么需要这个重新介绍呢?因为 JavaScript 已经完全可以被称为世界上被误解最严重的编程语言了.虽然它被当做玩具来用,但是藏在让人迷惑的简单表象下面的,是强大的语言特性.从2005年,一 ...
- JavaScript的闭包和内存泄漏问题
闭包 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html JavaScript中必须提到的功能最强大的抽象 ...
- oracle索引、 管理权限和角色
索引 1 单列索引create index 索引名 on 表名(列名): 2复合索引在同一张表上可以有多个索引,但是要求列的组合必须不同.create index 索引名 on 表名(列名1, 列名2 ...
- 编写高效的C程序与C代码优化
本文地址:http://www.cnblogs.com/archimedes/p/writing-efficient-c-and-code-optimization.html,转载请注明源地址. 说明 ...
- 《Velocity 模板使用指南》中文版[转]
转自:http://blog.csdn.net/javafound/archive/2007/05/14/1607931.aspx <Velocity 模板使用指南>中文版 源文见 htt ...
- JVM监控概述(图文)
JVM内存分配概述 Jvm 内存分为:堆.非堆及直接内存三大块. 堆区分为年轻代和老年代,永生代属于非堆内存. 对象优先在Eden区分配 大对象直接进入老年代 长期存活的对象将进入老年代 class. ...
- JS学习之路,菜鸟总结的注意事项及错误更正
JavaScript 是一种面向对象的动态语言,它的语法来源于 Java 和 C,所以这两种语言的许多语法特性同样适 用于 JavaScript.需要注意的一个主要区别是 JavaScript 不支持 ...
随机推荐
- mina学习(一)
Mina:是一个帮助用户开发高性能和高伸缩性网络应用程序的框架 学习地址链接:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html ...
- .Net Install类的Install、Commit等事件触发顺序
.Net Install类的Install.Commit等事件触发顺序 空间 首先是Install其中调用base.Install过程中导致OnBeforeInstallOnAfterInstal ...
- sublime3的安装和注册,和前端利器emmet插件的安装。
1.下载sublime3,在网上搜索sublime3,在官网下载即可. 2.下载后安装,直接下一步下一步即可安装. 3.注册. 在help菜单中,enter license里面输入 —– BEGIN ...
- backbone extend 源码分析
var extend = function(protoProps, staticProps) { var parent = this; var child; if (protoProps && ...
- JQuery 内容过滤选择器
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 被druid折磨的够呛
使用德鲁伊数据库连接池 数据源是这么配的 <!--数据源--> <bean id="dataSource" class="com.alibaba.dru ...
- iOS 支付 [支付宝、银联、微信](转载)
资料 支付宝 //文档idk都包含了安卓.iOS版 银 联 银联官网资料 Demo Demo给了一个订单号,做测试使用,若出现支付失败什么的,可能是已经被别人给支付了,或者是服务器订单过期了 ~ 一. ...
- 异步刷新tableView
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self.tableView rel ...
- 简单的apk Ionic
index.html <html> <head> <meta charset="utf-8"> <meta name="view ...
- SQLServer找出执行慢的SQL语句
SELECT (total_elapsed_time / execution_count)/1000 N'平均时间ms' ,total_elapsed_time/1000 N'总花费时间ms' , ...