c++中引用和指针的主要区别

1. 都是地址的概念;

指针指向一块内存,它的内容是所指内存的地址;

引用是某块内存的别名。

    ★ 区别:

1. 指针是一个实体,而引用仅是个别名;

2. 引用使用时无需解引用(*),指针需要解引用;

3. 引用只能在定义时被初始化一次,之后不可变;指针可变;

引用“从一而终” ^_^

4. 引用没有 const,指针有 const,const 的指针不可变;

5. 引用不能为空,指针可以为空;

6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为类成员名称时,其占用空间与指针相同4个字节(没找到标准的规定)。

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)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

时间: 2024-08-28 21:17:38

c++中引用和指针的主要区别的相关文章

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

请说出C++中引用和指针的区别.(华为.腾讯.阿里等) 参考答案: (1)当引用被创建时,它必须被初始化.而指针则可以在任何时候被初始化. (2)一旦一个引用被初始化为指向一个对象,它就不能被改变为对另一个对象的引用.而指针则可以在任何时候指向另一个对象. (3)不可能有NULL引用.必须确保引用是和一块合法的存储单元关联. 进一步解析: 指针和引用都是 C++ 中的基本语法成份,它们既有联系,也有不同之处. 它们都是地址的概念,其中指针指向一块内存,它的内容是所指内存的地址:而引用是某块内存的

C语言学习笔记 (002) - C++中引用和指针的区别(转载)

下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用.见下图,所示引用的含义: 2.指针和引用的区别 首先,引用不可以为空,但指针可以为空.前面也说过了引用是对象的别名,引用为空--对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化.因此

[转载]C++中引用与指针的区别(详细介绍)

本文转载自http://www.cnblogs.com/tracylee/archive/2012/12/04/2801519.html C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引

C++中引用、指针与const之间的爱恨情愁

学过C语言基础的肯定都知道变量和数据类型是再简单不过的知识,然而这个基础中确有几个泥潭,稍有不慎就粉身碎骨--编程受阻,面试被刷.其中一个就是引用.指针和const,以及相互之间剪不断理还乱的关系.今天我们就来理一理. 1.引用是个什么鬼 1.1引用的概念 引用是为对象另外起的一个名字,也就是别名而已.那什么是对象呢?注意这里说的对象和面向对象里的对象不是一回事.这里的对象是内存的一块区域,它具有某种类型,变量是命名了的对象.可以这么认为,引用与对象简单的关系就像姓名和本人.姓名可以多换几个,但

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

1:引用的和指针在概念上的区别 引用是变量的别名,例如 int m; int &n=m; 引用作为一个别名.它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量).则任何对引用的操作即对变量的操作.引用一般是用于处理函数的参数与返回值. 使用规则: a:引用在创建的时候必须被初始化(指针可以在任何时候赋值) b:引用必须与一个确定的合法内存单元相关联.不存在NULL引用. c:一旦引用初始化后,就

C++中引用与指针的区别(详细介绍)

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

C++中引用和指针区别

引用和指针区别:1 引用必须初始化,指针可以初始化为NULL2 引用没有自己内存:指针有内存3 指针可改变指向,引用一旦指向不可以改变 4 引用没有const,指针有const,但是一旦const就不可改变 5 sizeof指针,得到指针指向变量地址的大小:sizeof引用,得到引用指向变量的大小:引用注意事项:1 不能初始化为NULL2 没有void类型,没有数组的引用int & a[10]3 没有引用的引用 int &&a=b;4 没有引用的指针 int &* ,但有指

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

1.指针和引用的主要区别. 引用是为变量起另一个名字(小名),一般在变量初始化时,初始值直接拷贝给变量,定义引用时,把引用(小名)和初始值“绑定”在一起,而不是将初始值拷贝给引用.因为 无法将引用重新绑定到另一个对象,所以引用必须初始化. 举个例子: 有个变量叫张三,张三=2.给张三起个小名叫小三,即小三=张三.定义引用”小三“时必须针对一个对象,一旦定义完成,”小三“就不能再指定别的变量,所以起小名时,必须初始化(针对一个大名). 引用本身不是一个对象,不能定义引用的引用(引用只是一个小名,上

引用还是指针?

引言 我们知道在C++中引用和指针都可以用于间接访问指代对象,但是何时采用哪一个,也许我们并非很明确地知道.因此,写下本文为大家提供参考. 选用规则 1.当可不指向任何对象,即NULL,使用指针 由于引用一定是指向某个对象的,不存在空引用. 2.当要求可指向另一对象时,使用指针 因引用总是指向最初获得的那个对象,不可更改 3.实现某些操作符时,如operator[],使用引用 4.因不存在空引用,引用更高效,不用判空 void printInt(const int& a) { printf(&qu