C++的引用和指针的区别(&和*)

这里,做个总结。
资料来源:https://www.zhihu.com/question/37608201
More Effective C++
先来说一下指针的特点:
1.指针的本意是可以指向一块地址空间,这就意味着指针可以指向未初始化的内存空间。
2.这里我们来了解一下const在指针上的用法,我们这里要理解两个const,指向常量的指针以及常量指针,指向常量的指针说明我们不能通过这个指针去修改这个常量。之后,我们再讨论一下常量指针,常量指针的意思就是我们只能指向一块特定的内存,但是不能改变。
3.在没有指定该指针为常量指针的时候,我们可以随意改变该指针指向的内存。
知道了指针的这些特点,我们就可以很快的理解引用有哪些不同。
引用的意思更像是一个对象的别名,是指代这个对象的一个名字。
1.既然是一个别名,那自然是无法给一个未初始化的对象起别名的啦,这就带来一个好处,在我们在使用引用的时候。不用判断这个引用是否初始化(指针必须判断),省下了一个功夫。
看下知乎上的一个例子:
void fun1(int *point)
{
// 为了代码的稳健和安全,我们需要判断指针是否有效,通常做法是判断指针是否为
// 空,其他的判断就需要根据函数的具体功能来判断了
if(!point)
{
return;
}
// 函数实现
}

void fun2(int &refence)
{
// 在这里,我们就不用担心refence是否为空
}

作者:牛开放
链接:https://www.zhihu.com/question/37608201/answer/90293843
来源:知乎
2.引用类似于一个常量指针,当指定了一个对象的引用,就不能把这个引用改变成其他对象的引用了。具体还是看下知乎上的例子:
int xiaoming = 1;
int &refence_mingming = xiaoming;
int xiaoan = 2;
refence_mingming = xiaoan; // error,引用不能换了

这里提一句哈,引用的内部也是借助指针来实现的,但是应该在外面还包裹了其他信息。所以,引用的占用内存应该是会比指针大的,但是肯定是比把整个对象当做参数的代价要低。

猜你喜欢

转载自blog.csdn.net/github_33873969/article/details/79599071