指针和引用的关系

 (1)从语法概念上来讲:引用是一个变量的别名不开空间,指针存储的是一个变量的地址,要开空间。

(2)引用在定义时必须初始化,指针建议初始化,但语法上不是必须的。

(3)引用在初始化时引用一个对象后,就不能再引用其他对象;指针可以在不断地改变指向对象。

(4)引用可以直接访问指向对象,指针需要解引用才是访问指向对象。

(5)sizeof中含义不同,引用结果为引用类型的大小,但是指针始终是地址空间所占空间字节个数

(6)指针很容易出现空指针和野指针的问题,引用很少出现,引用相对于来说会相对来说更安全一些。

下面将基于指针传递和引用传递俩种方式进行比对:

引用传递:func内的X是关于外部变量n的引用,x和n是一个东西,改变x就等于改变n;所以n的值会成为10。基于此,我们发现引用传递的书写方式与值传递相同。

class A
{
public:
	void func(int& x)
	{
		x = x + 10;
	}
};
int main()
{
	A a;
	int n = 0;
	a.func(n);
	cout << "n=" << n << endl;
	return 0;
}

 指针传递:


class A
{
public:
	void func(int* x)
	{
		(*x) = (*x) + 10;
	}
};
int main()
{
	A a;
	int n = 0;
	a.func(&n);
	cout << "n=" << n << endl;
}

反汇编:

俩者进行反汇编后,进行对比后发现可知俩者的底层实现是一样的。

那么什么时候使用指针 什么时候使用引用呢?

“用适当的工具做恰如其分的工作”

如果只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用指针,以免发生意外。

                                                                                         ——引用于《高质量的c_c++编程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fychohchgu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值