c++基本语法之一二三(2)-指针和引用

文章通过代码示例对比了C++中的指针和引用,强调引用是对象的别名,操作引用会直接影响到原始对象,而指针则需要通过解引用操作才能影响其指向的对象。指针可以改变指向,而引用一旦初始化后不能改变。此外,指针作为独立对象占用内存,而引用不直接占用(实际可能通过指针实现)。
摘要由CSDN通过智能技术生成

前言

  上一章说了指针是什么玩意,现在说一下经常拿来对比的指针和引用;

引用

  上文说到:指针某种程度上就代表了它所指向的对象,但是为什么说是某种程度上呢?因为它只是记录了对象的地址,如果你想访问这个对象的话,你可以通过指针来间接访问到对象,但是指针并不代表它所指向的对象。
  那么再看引用,很多其他的文章经常会说过:引用是对一个对象起了一个别名。没错,可以这样认为引用就是一个绰号,比如有个童鞋叫王明明,别人给他起了一个绰号叫小明,那么小明=王明明,二者就是等同的,可以这样说:引用相比指针来说,它完全就是代表着它所指向的对象
来看代码:

int main()
{
	int A = 0;
	int& B = A;
	B++;
	cout << "A的值是:" << A << endl;
	B = 0;
	cout << "A的值是:" << A << endl;
}

来看结果:在这里插入图片描述
  这里我定义了一个引用B指向了A,我对引用进行了一些操作,完全的反馈给了A。
  但是我们把引用换成指针后

int main()
{
	int A = 0;
	int* B = &A;
	B++;
	cout << "A的值是:" << A << endl;
	B = 0;
	cout << "A的值是:" << A << endl;
}

  再来看结果:在这里插入图片描述
  我擦,没变化,那给指针进行的操作都跑哪去了,我们打印一下B的值。

int main()
{
	int A = 0;
	int* B = &A;
	cout << "B的值是:" << B << endl;
	B++;
	cout << "A的值是:" << A << endl;
	cout << "B的值是:" << B << endl;
	B = 0;
	cout << "B的值是:" << B << endl;
}

  看结果在这里插入图片描述
  看看,我们对指针的操作并没有反馈到它所指向的对象身上,而是单单对指针进行了操作,那为什么指针+1,会在原来的地址值上增加了4呢?注意:对指针+1这个操作,会让指针记录的地址往后跳,这个跳的尺度有多大呢?

int main()
{
	int A = 0;
	double* B = nullptr;
	cout << "B的值是:" << B << endl;
	B++;
	cout << "B的值是:" << B << endl;
}

  看结果
在这里插入图片描述
  增加了8,这代表指针指向的地址往后移了8个字节,这个移动的幅度是根据指针类型决定的。

  好了,总结一下,指针和引用的区别:

指针和引用的区别

  1.指针是个独立对象,它的值是一个地址,而引用不是一个对象,它依托于一个对象,不能独立存在。
  2.指针可以先声明,后面再给指针赋值,但是引用必须在声明的时候就给它赋值(也叫初始化),这个很好理解,还是那个绰号的例子,给人起绰号不能空起吧,得说某某某的绰号是啥啥啥吧,哈哈~。
  3.指针可以改变其值,引用不可以中途改变,毕竟同一个绰号不能安成另外一个人头上对吧~。
  4.指针占用内存,32位为4个字节,64位为8个字节,但是引用不占用内存(实际上编译器对于引用的实现也是通过指针实现的,所以按理说引用也占用内存的,这个问题我们后面再研究)。
  5.指针传递其实是值传递,而引用传递不是。

  好了,先说到这里啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值