当前位置:  编程技术>c/c++/嵌入式

c++中引用和指针的区别和联系

    来源: 互联网  发布时间:2014-10-25

    本文导语:  C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名;2. 引用使...

C++中的引用和指针

★ 相同点: 1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。

★ 区别: 1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终”
4. 引用没有 const,指针有 const,const 的指针不可变;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。
7. 指针和引用的自增(++)运算意义不一样;

★ 联系
1. 引用在语言内部用指针实现(如何实现?)。
2. 对一般应用而言,把引用理解为指针,不会犯严重语义错误。引用是操作受限了的指针(仅容许取内容操作)。
引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n 是m 的一个引用(reference),m 是被引用物(referent)。

代码如下:

int m;
int &n = m;

n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n 既不 是m 的拷贝,也不是指向m 的指针,其实n 就是m 它自己。

引用的一些规则如下:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
以下示例程序中,k 被初始化为i 的引用。语句k = j 并不能将k 修改成为j 的引用,只是把k 的值改变成为6。由于k 是i 的引用,所以i 的值也变成了6。

代码如下:

int i = 5;
int j = 6;
int &k = i;
k = j; // k 和i 的值都变成了6;

上面的程序看起来象在玩文字游戏,没有体现出引用的价值。引用的主要功能是传递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、 指针传递和引用传递。

以下是“值传递”的示例程序。由于Func1 函数体内的x 是外部变量n 的一份拷贝,改变x 的值不会影响n, 所以n 的值仍然是0。

代码如下:

void Func1(int x)
{
x = x + 10;
}
int n = 0;
Func1(n);
cout

    
 
 

您可能感兴趣的文章:

  • 请问在C文件中如何引用 C++ 生成库?
  • c++ const引用与非const引用介绍
  • java用什么方法代替C++里的引用功能,菜鸟小问题
  • linux下運行windows下寫的c++程式和它引用的dll
  • c++通过引用实现三个数字求最大值
  • C++中引用&与取地址&的区别分析
  • 请教高手,C++返回类对象引用问题
  • C++中指针和引用的区别分析
  • c++将引用或者是指针作为函数参数实现实参的运算
  • C++对数组的引用实例分析
  • java及C++中传值传递、引用传递和指针方式的理解
  • c++ 指针与引用的区别介绍及使用说明
  • C++中对象的常引用总结
  • 探讨:C++中函数返回引用的注意事项
  • 从汇编看c++中引用与指针的使用分析
  • 浅析C和C++函数的相互引用
  • c++中拷贝构造函数的参数类型必须是引用
  • C++中引用(&)的用法与应用实例分析
  • C++中引用的使用总结
  • 深入解析C++中的引用类型
  • 关于在内核空间和用户空间引用一个空指针的后果很原因
  • 引用与指针的效率问题
  • JAVA中函数调用时,能不能向 C/C++一样函数的入口参数可以为传出值(就是引用,或指针)
  • 基于指针pointers和引用references的区别分析
  • java函数传参数有“传值”与“传引用(指针)”之分吗?
  • 智能指针与弱引用详解
  • 深入分析C语言中结构体指针的定义与引用详解
  • C/C++中指针和引用之相关问题深入研究
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • HTML5 <blockquote> 标签(定义引用)详细介绍及举例说明
  • Java中弱引用和软引用的区别以及虚引用和强引用介绍
  • JQuery 在线引用及测试引用是否成功
  • “当某个实例不再被任何对象引用时就会被垃圾回收机制回收”,那么怎样才算是不被任何对象引用呢?
  • python共享引用(多个变量引用)示例代码
  • java的引用类型的详细介绍
  • 解析Android开发优化之:软引用与弱引用的应用
  • 如何在一个package中引用另一个package中的类?
  • JSP引用JAVABEAN的问题
  • 关于环境变量的设置和引用
  • grep 后向引用问题
  • 我的Jbuilder怎么引用我自己编写的Class文件?
  • 在aspx页面引用html页的写法
  • 没人解决吗?我在一个包中如何引用一个未打包的Class?
  • 用户定义类引用??
  • 一个简单的引用的问题
  • EJB间如何引用?
  • C++中对象的常引用总结 iis7站长之家
  • 引用的奇怪问题
  • kdevelop lib库引用问题(急)
  • 如何得到一个文件描述符的引用的个数?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3