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 不支持 ...
随机推荐
- 关于C语言读取多行数据的问题
我有如下数据格式3360 2001 5 1750.5 1246.5 22.5 n 1775=1177-1316:13360 2001 5 1750.5 1 ...
- 【转】UnityVS(Visual Studio Tools For Unity)的安装与使用
Unity 的开发者们,尤其是微软系的Unity开发者们,用Mono是不是烦死了?你是不是跟我一样,用vs来写代码,用Mono来跟踪调试?好麻烦啊好麻烦. 也许你会说,傻逼你不会用UnityVS插件么 ...
- 【转】C# 解析 json
C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的 ...
- linux shell工具集合
1)判断进程是否存在,如果不存在再执行启动命令,可以避免一个脚本同时启动多份 if [ $(ps -ef |grep bastion_account.sh|grep -v grep|wc -l) - ...
- sql CRUD 增删改查复习汇总
1.创建数据库create database 数据库名称删除数据库drop database 数据库名称2.创建表create table 表名( 列名 类型(长度) 自增长 主键 非空,)自增 ...
- 500Internal Server Error
在今晚测试wamp的项目时,当我导入一个项目到www目录下时出现如下错误:Internal Server ErrorThe server encountered an internal error o ...
- 欢迎大家提问Android技术及职业生涯等问题
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 最近有些时间,但QQ群问的问题比较多,不能一一解答,如果有价值 ...
- Python的运行
1.在命令行中运行 2.使用shell(IDLE) 3.新建.py脚本 只要是编辑器都可以 4.脚本在IDLE中运行 5.在windows下的cmd下运行脚本
- FastDFS分布式文件系统安装与使用(单节点)
http://blog.csdn.net/xyang81/article/details/52837974 http://download.csdn.net/detail/xyang81/966749 ...
- ViewModel在MVC3中的应用:实现多字段表格的部分更新
假设我们有这样一张用户表: public class F_users { [Key] [Display(Name="用户名:")] [Required(ErrorMessage=& ...