图解C++指针与引用的区别

一、理解指针的基础,重要指数5星

一个变量的组成:变量地址,变量名,变量值

如int i=10
在这里插入图片描述

二、指针

2.1是什么

指针用于存放一个变量在内存中的地址,通过指针间接操作这个变量
如:int *p; 声明一个整型指针变量p,指向某个int类型的变量

代码举例
实现指针p指向变量i

int i= 10;
int *p; //声明一个整型指针变量p
p=&i;//将i的地址赋给指针变量p

p=&i中,&为取址,取变量i的地址

图解代码
因为指针变量本身也是一个变量,也有变量地址,变量名,变量值
在这里插入图片描述
从上图可以看出指针p的变量值存放变量i的地址

2.2如何使用指针操作变量

运用*p来代表变量i中的变量值,也就是说通过 *p改变变量i的变量值

具体代码

int i= 10;
int *p; //声明一个整型指针变量p
p=&i;//将i的地址赋给指针变量p

*p=11;
cout << i << endl;//输出i=11

补充*的使用

  • int* p(类型名* 变量名): *表示一个指针类型
  • *p (*变量名):*表示间接寻址运算符

2.3为什么使用指针

可能有童鞋问了,可以通过变量名i直接改变变量值,为什么通过指针呢
其实通过变量名改变变量值,中间也是通过地址去访问的

下面从运行栈的角度考虑

举例

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;    /* 一个字符型的指针 */

指针变量ip,dp,fp,ch的内存空间一般都是四字节,所有指针的值的实际数据类型,都是一个代表内存地址的长的十六进制数。

在栈上运行指针,比运行实际的变量所占的内存小, 把指针放到栈中能有效节省空间还能节省传递大参数时所耗费的时间 ,所以能更快, 而且栈空间很小很宝贵 , 不可能把大数据压进去的。

三、引用

3.1引用是什么

引用是某个变量的别名,相当于某个变量的第二个名字
对引用的操作,就相当于对变量的操作

引用形式

  • 引用是用&引导定义:类型 &引用名=变量名;

比如:英雄联盟的别名叫LOL
类型 &引用名=变量名;
Game &LOL=英雄联盟;

3.2引用的简单例子

证明:ir是i的别名,对ir的操作就相当于对i的操作

#include<isotream.h>
void main()
{
	int i =9;
	int &ir =i;
	cout<<"i="<<i<<"  "<<"ir="<<ir<<endl;//i=9  ir=9
	
	ir=20;//改变ir的值
	cout<<"i="<<i<<"  "<<"ir="<<ir<<endl;//i=20  ir=20

    cout<<"i的地址是:"<<&i<<endl;//i的地址是:0x0012FF34
    cout<<"ir的地址是:"<<&ir<<endl;//ir的地址是:0x0012FF34
}

图解代码
在这里插入图片描述
对ir的操作就相当于对i的操作

3.3使用引用注意点

  • (1)不能建立引用的引用
  • (2)不能建立引用数组,不能建立数组引用
  • (3)可以建立指针的引用,不能建立指向引用的指针

代码说明

int i=0,a[10];
int &&ii=i;  //错误,ii是引用的引用
int &&aa=a;  //错误,aa是数组的引用
int &*ip=i;  //错误,ip是指向引用的指针

int *pi=&i;
int *&pr=pi; //正确,pr是指针的引用

四、指针与引用的区别

4.1为什么C++要引入引用

其实从本质上看,引用就是加了约束的指针,引用改善了指针的不足之处

4.2指针不足之处

  1. 操作空指针:被赋值为0的指针
  2. 操作野指针:未被初始化的指针
  3. 不知不觉改变了指针的值,而后还以为该指针正常

4.3引用改善指针

  1. 引用必须初始化(保证没有野指针)
  2. 初始化就是现存变量的别名(保证不是空指针)
  3. 一个引用永远指向他初始化的那个对象(保证指针值不变)。

参考链接

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿成长轨迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值