C++中的指针和引用

本文详细介绍了C++中的引用和指针。引用作为对象的别名,不占用额外内存,必须在定义时初始化且不可改变绑定的对象。指针则是一个对象,存储其他对象的地址,可以为空,但使用前需赋值。引用比指针更安全,不存在空引用和野引用问题。指针可以有多个级别,而引用仅有一级。
摘要由CSDN通过智能技术生成

介绍指针和引用之前我们需要知道,指针和引用都属于复合数据类型的一种。

一、引用

引用 就是(别名)为对象起了另一个名字,主要用于函数参数和返回值类型。引用不是对象,而是,程序在定义引用时把引用和他的初始值绑定在一起,只是一个名字,不存在实际的地址。

例如:

int i=1024; //定义一个int类型的变量
int &r=i; //定义引用&r指向i (实际上就是i的另一个名字)
//此时r的值也为2

定义引用的几项硬性要求:

  1. 引用必须初始化。
  2. 初始值必须是一个对象,不能与某一个特定值或者计算结果绑定在一起。
  3. 引用的类型一定要和对象的类型一致。(对象是int类型,引用也必须是int类型)
  4. 一旦定义了引用就无法在绑定到其他对象上。但是一个对象可以绑定多个引用。
int &r; //错误,没有初始化
int &r=10 //错误,引用的初始值必须是对象
double i=3.14;
int &d=i; //错误,数据类型不一样

 另外需要知道的是为引用赋值就是把值付给了与引用绑定的对象上面。例如:

int i=1024;
int &r=i;
r=2;//把2赋值给r
//此时i 的值为2

 引用本身不是对象,所以不能定义引用的引用。

二、指针

指针是指向另一种类型的复合类型。指针是对象!

定义指针需要写成 *d 这样的格式,d是变量名。定义指针变量前面必须加*。

int *p1, p2;//p1是int类型指针,p2则是int类型的对象

指针中存放的是对象的地址,要想获取该地址需要使用取地址符 & 。* 符号称为 解引用符,用来访问对象。

    int d = 10;
	int* p1 = &d;
	cout << "p1:  " << p1 << endl;
	cout << "*p1:  " <<* p1 << endl;
//此时p1存放的是d的地址 输出地址 *p1存放的是数据 输出10

指针使用的硬性要求:

  1. 指针与所致对象类型必须一致
  2. 指针定义时可以不用赋予初值,但是指针使用前必须赋初值。
  3. 指针若想定义只能指向对象,不能指向特定值。(int *p=10 错误)

 三、& 和 * 符号多重含义解释

& 符号在这篇文章中有引用 和 取地址符 两个含义,同样的 * 符号有指针和解引用两个含义。如何区分呢:

int i=42;
int &r=i; //引用符号
int *p;//指针符号
p=&i;//取地址符号  输出返回 地址
*p=i;//解引用符号   输出返回值 即42

 区分: & 或者 * 紧跟着类型名(int double……)出现时是引用(指针) &或者*出现在表达式中时是取地址符(解地址符)

四、指针和引用的区别

  1. 指针是对象(地址),引用不是对象(别名)。
  2. 引用定义时候不可以为空,但指针定义可以为空。
  3. 引用使用起来更安全,不存在空引用,野引用的概念。
  4. 引用本身不是对象,不存在定义引用的引用。而指针是对象,则存在指针的指针(二级指针 **p)。故指针没有级数限制,而引用只有一级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值