指针与引用的区别

相同点:

1.     指针与引用都是地址的概念。指针指向一块内存,指针的内容是所指向内存的地址;而引用则是某块内存的别名。

2.     引用在语言内部用指针实现。

3.     一般把引用理解为指针,不会犯严重语义错误。引用操作可以看做是受限的指针(仅允许取内容操作)。

不同点:

1.     指针逻辑上是独立的,可以改变指针的内容,也可以改变指针指向的内存中的内容;而引用只是一个别名,在逻辑上不上独立的,它的存在具有依附性,必须在声明时就初始化,而且引用的对象在整个生命周期中时不能被改变的,但是其指向的内存的内容可以被改变。

2.     声明上的区别:指针的声明如int* p;可以独立声明;而引用声明,int a; int &b = a;必须依附某个变量。指针存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是一个东西,只不过是原来变量的一个别名而已。

3.     指针使用时需要解引用,即添加*符号;而引用使用时无需解引用,可以直接使用。

4.     指针可以用const修饰,常量指针的内容(即存储的地址)是不可改变的;而引用不能用const修饰,因为其本身就不能被改变。

5.     “sizeof(引用)”得到的是所指向的变量(对象)的大小;而“sizeof(指针)”得到的是指针本身数据类型的大小。

6.     指针和引用的自增(++)运算意义不同,指针是其内容(即存储的地址)自增;而引用是其指向内存的内容自增。

7.     指针在初始化后可以被改变;而引用只能在声明时初始化,且不能被改变。

8.     指针的值可以为空,即不指向任何内存地址;而引用必须在定义时初始化,不能为空。

9.     指针可以有多级;而引用只能一级。

10.  引用时类型安全的,而指针不是,引用比指针多了类型检查。

11.  指针作为函数参数时,实际上是值传递,即将指针的地址进行复制,赋值给函数形参,函数形参在栈中开辟了内存空间来存放由实参传递过来的地址值,从而形成实参的一个副本,值传递到特点是被调用函数对形参的任何操作都作为局部变量进行,不会影响主调函数的实参变量的值。而引用在函数传递过程中,被调用函数的形参也作为局部变量在栈中开辟了内存空间,但这是存放的是由主调函数放进来的实参变量的地址,没有复制的操作,被调用函数对形参的操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量,因此被调用函数对形参的任何操作都影响主调函数的实参变量。

12.  程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应的地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改变,因此指针可以改变其指向的对象(指针变量中的值可以改变),而引用对象则不能修改。

13.  指针传递参数存在堆栈的复制,直接使用指针很容易造成地址溢出错误;而引用减少大量数据经过堆栈的复制,又避免了地址溢出的错误的发生。

时间: 2024-12-20 14:53:26

指针与引用的区别的相关文章

指针与引用的区别以及引用的三种用法

1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名. 下面引自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一

转 浅谈C++中指针和引用的区别

浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a

C++中指针和引用的区别

此文转自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参

C++ 中指针与引用的区别

指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引用是某块内存的别名.     ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化

指针与引用的区别和联系

指针与引用的区别: The difference between "pointer" and "reference" 区别1: 给指针A赋值的时侯,要么赋一个地址B,要么赋一个同类型的指针C ( 使用地址B赋值时,B中存储的值的类型要和A指针指向的类型一致.如果B指向的值用const 修饰,那么指针A在初始化时,最外面也要用const 修饰 使用指针C赋值时,如果指针C最外面使用const 修饰,如 const int * C  OR  const int * co

C++小知识:指针和引用的区别

从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变.    而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的:     指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传

向函数中传递指针和传递指针的引用的区别

如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针:但 是对于传递指针应用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再 引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了 看个例子: #includ

指针和引用的区别(c/c++)

http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变: 5.

【转】指针和引用的区别

c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用“从一而终” ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变: 5. 引用不能为空,指针可以为空: 6. “sizeof 引用”得到的是所指向的变量(对象)的大小

指针、引用的区别和联系

时间:2014.05.27 地点:基地 ---------------------------------------------------------------------------------------- 一.指针和引用的区别 1.指针可以为空,引用不可以不空. 引用是一个对象的别用,定义一个引用时必须初始化,而声名指针时可以不指向任何对象,故使用指针时也常要做空的判断,而引用无需,因为引用总是绑定着一个对象. 2.指针可以改变指向,而引用不可以重新绑定新对象.(指针变异思迁,引用从